Notes / Projects / App Signal Forge / Architecture / Adrs

Signal Forge ADR-004: Helm-managed Alloy stack (grafana/k8s-monitoring)

Standardizes on the grafana/k8s-monitoring Helm chart's five-role Alloy topology, keeping the hand-rolled DaemonSet only as a non-deployed reference.

Updated July 10, 2026 · §202607091847-6 ·

Signal Forge ADR-004: Helm-managed Alloy stack (grafana/k8s-monitoring)

Status: Accepted

Decision: The production collector stack uses the grafana/k8s-monitoring v3.8.4 Helm chart (five specialised Alloy roles). The hand-rolled DaemonSet in k8s/monitoring/grafana/ is kept as a reference artifact but is not deployed. The split between cloud and local collector configs within this stack is covered separately in ADR-005.

Rationale:

  • Running two Alloy instances receiving the same OTLP traffic caused duplicate spans, duplicate metric samples, version mismatches, and CrashLoopBackOff.
  • The Helm chart manages RBAC, ServiceAccounts, and River configs with versioned upgrades. The hand-rolled version required manual maintenance of all these.
  • The five-role split (metrics, logs, singleton, receiver, profiles) mirrors production AKS configuration, providing parity for validation.

The five roles:

RoleKindPurpose
alloy-receiverDaemonSetOTLP push receiver — app telemetry
alloy-logsDaemonSetPod + node log tailing → Loki
alloy-metricsStatefulSetkubelet, cAdvisor, KSM → Prometheus
alloy-singletonDeploymentCluster events, KSM API → Loki/Prometheus
alloy-profilesDaemonSetContinuous profiling (disabled locally)

Alternative considered: Single hand-rolled DaemonSet — rejected due to operational complexity and the duplicate-collector problem.

Local graph

Full graph →