Telemetry backends¶
Status: draft M0. Every backend is an overlay of the collector (collector.md); a switch is configuration, not code. All sources retrieved on 2026-10-10.
1. Overview¶
| Backend | Overlay | Signals | Authentication | Temporality | Status of the component | Open items |
|---|---|---|---|---|---|---|
| Local Grafana stack | local |
all | none (internal network) | cumulative | otlp_http, otlp_grpc (core) |
none |
| Grafana Cloud | grafana |
all | Basic auth header | cumulative | otlp_http |
exact format of the header and gRPC not verified |
| New Relic | newrelic |
all | header api-key |
delta | otlp_http |
none |
| Datadog | datadog |
all | API key | converted internally | exporter beta | statistics only from the sample |
| Azure Monitor | azure-monitor |
all | Microsoft Entra (service principal or managed identity) | delta | azure_auth beta |
GA or preview; exponential histograms |
| Sentry | sentry |
traces, logs | header x-sentry-auth |
no metrics | OTLP "open beta" | status of the OTLP ingestion |
2. Local Grafana stack¶
Compose profile observability with Prometheus, Loki, Tempo, Grafana and Alertmanager.
| Part | Assumption | Evidence | Configuration |
|---|---|---|---|
| Prometheus | OTLP receiver with --web.enable-otlp-receiver, path /api/v1/otlp/v1/metrics; delta only experimental |
https://prometheus.io/docs/guides/opentelemetry/ [verified] | prometheus.yaml, checked with promtool check config |
| Loki | otlphttp exporter to http://<loki>/otlp; allow_structured_metadata: true |
https://grafana.com/docs/loki/latest/send-data/otel/ [verified] | loki.yaml, checked with loki -verify-config (3.7.8) |
| Tempo | OTLP gRPC and HTTP; Tempo 3 without the block compactor: |
Example and manifest in the Tempo repository, tag v3.1.0 [verified] | tempo.yaml, checked with tempo -config.verify=true (3.1.0) |
| Grafana | File provisioning | https://grafana.com/docs/grafana/latest/administration/provisioning/ [verified] | Provisioning loaded with Grafana 13.2.3 |
Compose sets the admin password through the Grafana resolution $__file{...}. The variant
GF_SECURITY_ADMIN_PASSWORD__FILE had no effect in the local test with the Grafana binary 13.2.3
(login with admin:admin still worked) [verified]; whether the Docker image resolves it through
its start script is not checked [assumed]. $__file{} works in both cases.
The local stack is meant for one instance. It has no high availability and no tenant separation.
3. Grafana Cloud¶
One OTLP gateway https://otlp-gateway-<REGION>.grafana.net/otlp for all three signals;
authentication by Basic auth from the stack tile
(https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/) [verified]. The overlay reads
the whole header value Basic <base64(instance-id:token)> from a file so that it works without
an extension. The dashboards of this repository run there if the data source gets the UID
prometheus or the UID is replaced on import.
4. New Relic¶
OTLP endpoints US https://otlp.nr-data.net and EU https://otlp.eu01.nr-data.net, header
api-key with the license key, http/protobuf and delta temporality recommended; limits include
string attributes up to 4095 characters and a payload under 1 MB
(https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp/) [verified]. There
is no dedicated New Relic exporter in the contrib repository; the route is OTLP [verified]. The
overlay converts with cumulative_to_delta and truncates attributes.
5. Datadog¶
The Datadog exporter (contrib, beta for traces, metrics, logs) no longer computes APM statistics
itself; the Datadog connector is intended for that. Against "413 Request Entity Too Large",
batching in the sending_queue of the exporter helps
(https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/datadogexporter)
[verified]. Datadog also names its own DDOT collector as the recommended route
(https://docs.datadoghq.com/opentelemetry/setup/) [verified]; the product stays with the
standard collector so that all backends have the same base with the same privacy filters.
6. Azure Monitor¶
Native OTLP ingestion through the collector, Azure Monitor Agent or AKS add-on; the collector needs
the extension azure_auth, authentication only through Microsoft Entra with the role "Monitoring Metrics
Publisher" on the Data Collection Rule; endpoints depend on DCE and DCR
(https://learn.microsoft.com/en-us/azure/azure-monitor/containers/opentelemetry-protocol-ingestion)
[verified]. Application Insights expects delta temporality and exponential histograms [verified].
Consequences:
- The overlay converts sums to delta. The explicit histograms of the server stay explicit; whether Azure displays them that way is open [assumed]. Exponential histograms would break the SLO rules for Prometheus (there, thresholds are bucket boundaries). Ticket: check against a real Azure environment.
- Whether the native ingestion is generally available or a preview is contradictory in the sources [verified: contradictory]. The owner decides before use.
- On Azure VMs,
managed_identityinstead of a service principal is the better route (no secret); the overlay shows the service principal because it works everywhere. - The extension
azure_authhad a vulnerability in inbound checking in versions v0.124.0 to v0.150.0; outbound use was not affected (https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/azureauthextension) [verified]. The overlay uses it only outbound, and the pinned version is above that range.
7. Sentry¶
Sentry accepts OTLP traces and logs, no metrics, status "open beta"; one endpoint per signal and
the header x-sentry-auth: sentry sentry_key=<public-key> (https://docs.sentry.io/concepts/otlp/)
[verified]. The contrib exporter sentry is alpha [verified]; the overlay uses OTLP.
For app crashes, Sentry is the only target that covers all platforms of the apps
(sentry_flutter: Android, iOS, Linux, macOS, Web, Windows;
https://docs.sentry.io/platforms/dart/guides/flutter/) [verified]. The apps send directly, not
through the collector (privacy.md 7).
8. Telemetry of the agent runtimes¶
Claude Code can send its own OpenTelemetry data (metrics, events, traces as beta); content is
off by default; the variables must be in the process environment
(https://code.claude.com/docs/en/monitoring-usage) [verified]. An adapter may point them at the
collector of the instance. Then the following applies: metadata only; OTEL_LOG_USER_PROMPTS,
OTEL_LOG_ASSISTANT_RESPONSES, OTEL_LOG_TOOL_DETAILS, OTEL_LOG_TOOL_CONTENT and
OTEL_LOG_RAW_API_BODIES stay off. By default Claude Code sets attributes such as user.email,
user.account_uuid, organization.id and session.id [verified, same source]. The allowlist
filters spans and logs; for metrics, transform/scrub_metrics deletes these keys on the resource
and the data point (checked locally on 2026-10-10 with otelcol-contrib 0.162.0) [verified]. The
claude_code.* names are not in the catalogue; whoever wants to evaluate them adds them there first
(09-agents.md).