From 78a56b78780961086a627d5d9983d73df5c55671 Mon Sep 17 00:00:00 2001 From: Giovanni Ferri Date: Sun, 13 Sep 2026 10:35:08 +0100 Subject: [PATCH 1/2] feat(unraid): scrape Imp metrics with Alloy --- values/base/grafana-k8s-monitoring.yaml | 80 +++++++++++++++++++ .../unraid-lab/grafana-k8s-monitoring.yaml | 8 ++ 2 files changed, 88 insertions(+) create mode 100644 values/clusters/unraid-lab/grafana-k8s-monitoring.yaml diff --git a/values/base/grafana-k8s-monitoring.yaml b/values/base/grafana-k8s-monitoring.yaml index 33415b8..ee7f907 100644 --- a/values/base/grafana-k8s-monitoring.yaml +++ b/values/base/grafana-k8s-monitoring.yaml @@ -136,6 +136,86 @@ collectors: scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] forward_to = [prometheus.relabel.talos_etcd_disk_latency.receiver] } + + // Imp publishes three small Prometheus endpoints. Discover only its + // ready metric ports; this avoids chart changes and does not broaden + // application scraping beyond imp-system. + discovery.kubernetes "imp_metrics" { + role = "pod" + namespaces { + names = ["imp-system"] + } + selectors { + role = "pod" + label = "app.kubernetes.io/name=imp" + } + } + + discovery.relabel "imp_metrics" { + targets = discovery.kubernetes.imp_metrics.targets + + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_instance"] + regex = "imp" + } + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_component"] + regex = "operator|agent|runtime" + } + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_phase"] + regex = "Running" + } + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_ready"] + regex = "true" + } + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_container_init"] + regex = "false" + } + rule { + action = "keep" + source_labels = ["__meta_kubernetes_pod_container_port_name"] + regex = "metrics" + } + rule { + source_labels = ["__meta_kubernetes_namespace"] + target_label = "namespace" + } + rule { + source_labels = ["__meta_kubernetes_pod_name"] + target_label = "pod" + } + rule { + source_labels = ["__meta_kubernetes_pod_container_name"] + target_label = "container" + } + rule { + source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_component"] + target_label = "component" + } + rule { + replacement = "integrations/imp" + target_label = "job" + } + } + + prometheus.scrape "imp_metrics" { + targets = discovery.relabel.imp_metrics.output + scrape_interval = "30s" + scrape_timeout = "10s" + scrape_protocols = ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] + clustering { + enabled = true + } + forward_to = [prometheus.remote_write.grafana_cloud_metrics.receiver] + } alloy-singleton: presets: [singleton] telemetryServices: diff --git a/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml b/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml new file mode 100644 index 0000000..10cd4d6 --- /dev/null +++ b/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml @@ -0,0 +1,8 @@ +# Grafana Kubernetes Monitoring must be allowed to discover Imp's pod metrics. +# The base profile remains limited to kube-system so OCI is unaffected. +annotationAutodiscovery: + namespaces: [kube-system, imp-system] + pods: + enabled: true + labelSelectors: + app.kubernetes.io/name: imp From 493b0c98e75ea0cb51711074c88001b611935323 Mon Sep 17 00:00:00 2001 From: Giovanni Ferri Date: Sun, 13 Sep 2026 10:38:50 +0100 Subject: [PATCH 2/2] fix(unraid): schedule Grafana Alloy operator --- values/clusters/unraid-lab/grafana-k8s-monitoring.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml b/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml index 10cd4d6..54e2986 100644 --- a/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml +++ b/values/clusters/unraid-lab/grafana-k8s-monitoring.yaml @@ -6,3 +6,11 @@ annotationAutodiscovery: enabled: true labelSelectors: app.kubernetes.io/name: imp + +# Every usable Unraid node is a tainted control-plane node. The Alloy Operator +# must tolerate that taint before it can create the metrics collector. +alloy-operator: + tolerations: + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule