Skip to content

feat: otel-collector pushing curated metrics to Grafana Cloud - #12

Draft
jonathandieu wants to merge 2 commits into
mainfrom
workload-and-platform-charts
Draft

feat: otel-collector pushing curated metrics to Grafana Cloud#12
jonathandieu wants to merge 2 commits into
mainfrom
workload-and-platform-charts

Conversation

@jonathandieu

@jonathandieu jonathandieu commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Replaces Prometheus's direct remoteWrite to Grafana Cloud with an in-cluster OTel
Collector: it scrapes Prometheus's /federate endpoint for the same curated allowlist
of series (outage canary: up, pod status, node memory, apiserver requests) and exports
via OTLP to Grafana Cloud, reusing the existing grafana-cloud-credentials secret.

Deliberately avoids exposing Prometheus itself for now — that's deferred to Tailscale
(dieubernetes#15). No HTTPRoute, no basic-auth, no network policy in this PR.

Deployed via the infrastructure appset (all clusters), same tier as kube-prometheus-stack.

Note: config.exporters.otlphttp/grafana_cloud.endpoint is an empty placeholder — needs
the real Grafana Cloud OTLP gateway URL filled in before this can actually export data.

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

Helm template diff

diff -u --recursive --label base --label head base head
--- base
+++ head
@@ -1239,7 +1239,7 @@
   listenLocal: false
   enableOTLPReceiver: false
   enableAdminAPI: false
-  retention: 10d
+  retention: 30d
   tsdb:
     outOfOrderTimeWindow: 0s
   walCompression: true
@@ -1260,15 +1260,6 @@
       release: release
 
   probeNamespaceSelector: {}
-  remoteWrite:
-    - basicAuth:
-        password:
-          key: password
-          name: grafana-cloud-credentials
-        username:
-          key: username
-          name: grafana-cloud-credentials
-      url: https://prometheus-prod-66-prod-us-east-3.grafana.net/api/prom/push
   securityContext:
     fsGroup: 2000
     runAsGroup: 2000
@@ -1286,6 +1277,15 @@
       release: release
 
   scrapeConfigNamespaceSelector: {}
+  storage:
+    volumeClaimTemplate:
+      spec:
+        accessModes:
+        - ReadWriteOnce
+        resources:
+          requests:
+            storage: 20Gi
+        storageClassName: do-block-storage
   affinity:
     podAntiAffinity:
       preferredDuringSchedulingIgnoredDuringExecution:
Only in /tmp/head: otel-collector.yaml

@jonathandieu

Copy link
Copy Markdown
Owner Author

Splitting into separate platform vs. workloads PRs for clearer review — closing in favor of those.

@jonathandieu jonathandieu reopened this Jul 2, 2026
@jonathandieu
jonathandieu force-pushed the workload-and-platform-charts branch from bdbaebc to def8529 Compare July 2, 2026 12:41
Replaces Prometheus's direct remoteWrite to Grafana Cloud with an in-cluster
OTel Collector that scrapes Prometheus federation and exports via OTLP.
Avoids exposing Prometheus itself (deferred to Tailscale, see dieubernetes#15)
while keeping the same curated allowlist of series for the outage canary.
@jonathandieu
jonathandieu force-pushed the workload-and-platform-charts branch from def8529 to f412861 Compare July 2, 2026 13:56
@jonathandieu jonathandieu changed the title feat: workload and platform ApplicationSets + charts feat: otel-collector pushing curated metrics to Grafana Cloud Jul 2, 2026
…LP credentials

Values need to sit under opentelemetry-collector: since it's a chart
dependency, same pattern as kube-prometheus-stack's own values.yaml.
Without it, none of the custom config reached the subchart and it fell
back to its own defaults (empty image.repository), rendering 0 resources.

Also adds a dedicated grafana-cloud-otlp-credentials secret rather than
reusing grafana-cloud-credentials — confirmed via 1Password that the
existing secret is scoped specifically to Prometheus remote write (a
different Grafana Cloud instance ID), not valid for the OTLP gateway.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant