Skip to content

SigNoz — Infrastructure & ASK Service Metrics

Covers two instrumentation layers:

  1. k8s-infra — DaemonSet + Deployment that collects RKE2 node/cluster metrics and forwards to SigNoz
  2. ASK service OTel — env vars added to each ASK service to emit traces, metrics, and logs

Architecture

RKE2 Nodes
  └─ k8s-infra DaemonSet (hostmetrics: CPU/mem/disk/net per node)
  └─ k8s-infra Deployment (k8s cluster metrics: pod/node/deployment state)
        │  OTLP gRPC :4317
SigNoz OTel Collector gateway (signoz-otel-collector.signoz.svc.cluster.local:4317)
ClickHouse → SigNoz UI

ASK Services (core-service, assistant-service, KMS, Hatchet)
  └─ OTel SDK env vars → OTLP gRPC → SigNoz OTel Collector

Part 1 — k8s-infra (RKE2 Infrastructure Metrics)

Step 1 — Mirror k8s-infra chart

Add to mirror-charts.yaml and gitlab-charts.yaml:

# mirror-charts.yaml
- name: k8s-infra
  repo: https://charts.signoz.io
  version: "0.13.3"
  harbor_project: signoz

# gitlab-charts.yaml
- name: k8s-infra
  version: "0.13.3"

Mirror images required (add to mirror-config.yaml):

Image Tag
signoz/signoz-otel-collector v0.144.5 (already mirrored)
otel/opentelemetry-collector-contrib 0.116.0

Run on bastion:

python3 mirror-images.py --filter k8s-infra
python3 core42-mirror-charts.py --config mirror-charts.yaml --filter k8s-infra
python3 gitlab-push-charts.py -c gitlab-charts.yaml --only k8s-infra

Step 2 — ArgoCD Application

Create environment/auh1/dev/02-argocd-application/observability/argocd-application-k8s-infra.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mod-auh1-dev-ask.observability.k8s-infra
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.io
spec:
  project: mod-auh1-dev-ask.observability
  sources:
    - repoURL: 'https://gitlab.cl1.sq4.aegis.internal/api/v4/projects/14/packages/helm/stable'
      chart: k8s-infra
      targetRevision: "0.13.3"
      helm:
        releaseName: k8s-infra
        valueFiles:
          - $values/applications/k8s-infra/values-mod-auh1-dev-ask.yaml
    - repoURL: 'https://gitlab.cl1.sq4.aegis.internal/ai71/ask71/mod-ask-devops.git'
      targetRevision: main
      ref: values
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: k8s-infra
  syncPolicy:
    automated:
      prune: true
    syncOptions:
      - CreateNamespace=true
      - ServerSideApply=true
    managedNamespaceMetadata:
      labels:
        pod-security.kubernetes.io/enforce: privileged
        harbor-pull-secret: "true"

Privileged PSA

The k8s-infra DaemonSet needs host network + pid access to collect node metrics. Namespace must be privileged PSA.

Step 3 — Values file

applications/k8s-infra/values-mod-auh1-dev-ask.yaml:

global:
  deploymentEnvironment: mod-auh1-dev-ask
  imagePullSecrets:
    - name: harbor-pull-secret

otelCollectorEndpoint: "http://signoz-otel-collector.signoz.svc.cluster.local:4317"

otelCollector:
  image:
    repository: harbor.cl1.sq4.aegis.internal/dockerhub/signoz/signoz-otel-collector
    tag: v0.144.5
    pullPolicy: IfNotPresent

otelAgent:
  image:
    repository: harbor.cl1.sq4.aegis.internal/dockerhub/signoz/signoz-otel-collector
    tag: v0.144.5
    pullPolicy: IfNotPresent

Part 2 — ASK Service OTel Instrumentation

Each ASK service (core-service, assistant-service, KMS, Hatchet) needs OTel env vars added to its Helm values.

OTel env vars (add to each service's values)

extraEnvVars:
  - name: OTEL_EXPORTER_OTLP_ENDPOINT
    value: "http://signoz-otel-collector.signoz.svc.cluster.local:4317"
  - name: OTEL_EXPORTER_OTLP_PROTOCOL
    value: "grpc"
  - name: OTEL_SERVICE_NAME
    value: "<service-name>"   # core-service, assistant-service, kms, hatchet
  - name: OTEL_RESOURCE_ATTRIBUTES
    value: "deployment.environment=mod-auh1-dev-ask"
  - name: OTEL_TRACES_EXPORTER
    value: "otlp"
  - name: OTEL_METRICS_EXPORTER
    value: "otlp"
  - name: OTEL_LOGS_EXPORTER
    value: "otlp"

Service name mapping

Service OTEL_SERVICE_NAME
core-service core-service
assistant-service assistant-service
KMS knowledge-management-service
Hatchet hatchet

SDK required

OTel env vars only work if the service has the OTel SDK built in. Verify with the service team that each app initialises the SDK on startup. Without the SDK, the env vars are ignored.


Verification

After k8s-infra is deployed:

# DaemonSet running on all nodes
kubectl get daemonset -n k8s-infra

# Check collector sending metrics
kubectl logs -n k8s-infra -l app=k8s-infra-otel-agent --tail=20

In SigNoz UI: - Infrastructure → should show RKE2 nodes with CPU/memory/disk - Services → should show ASK services after OTel SDK instrumentation


Troubleshooting

Symptom Cause Fix
DaemonSet pods Pending PSA not privileged Label namespace: pod-security.kubernetes.io/enforce: privileged
No node metrics in UI Wrong OTel collector endpoint Verify otelCollectorEndpoint points to signoz-otel-collector.signoz.svc.cluster.local:4317
Services not appearing OTel SDK not initialised in app Check app startup logs for OTel initialisation
ImagePullBackOff Image not in Harbor Mirror otel/opentelemetry-collector-contrib