Observability
Use Prometheus and OpenTelemetry to see aggregate traffic, errors, downloads, and page usage without tracking individual visitors.
Prometheus metrics
[metrics]
enabled = true
listen = "127.0.0.1:9100"
OTLP export
FLUXHEIM_OTLP=enabled
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_METRIC_EXPORT_INTERVAL=5000
The observability compose stack sets these for the website service. Set FLUXHEIM_OTLP=disabled to run the same binary without exporting metrics or traces.
Version 1.6.37 keeps the local observability smoke more reliable by retrying disposable Prometheus and Jaeger startup with freshly allocated ports when host-network ports race with other runner processes.
Keep labels low-cardinality: route group, language, status class, download artifact, and GitHub target are useful. Raw IP addresses and user identifiers are not.
What to dashboard
| Signal | Why it matters |
|---|---|
| Requests by route | Shows which public pages and docs are being used. |
| Requests by locale | Shows which languages need the most care. |
| Status classes | Shows errors without tracking individual users. |
| Download clicks | Shows which release artifacts are useful. |
| GitHub clicks | Shows which external project links matter. |
Privacy boundary
- Use aggregate counters and histograms instead of raw request logs.
- Do not label metrics with IP addresses, user agents, or full URLs.
- Keep Prometheus and OTLP listeners on loopback or an internal network.
- Make tracking behavior visible on the privacy and cookies pages.