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.
Keep labels low-cardinality: route group, language, status class, download artefact, 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 artefacts 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 behaviour visible on the privacy and cookies pages.