Endpoints
Grafana Cloud exposes a region-scoped OTLP gateway:https://otlp-gateway-prod-us-east-3.grafana.net/otlp (the collector’s hard-coded default) or https://otlp-gateway-prod-eu-west-2.grafana.net/otlp.
The collector strips any trailing /v1/traces / /v1/logs you paste, so either the base (.../otlp) or a full-signal URL works.
Authentication
<INSTANCE_ID>— the numeric OTLP-gateway instance / user id shown on the Grafana Cloud “OpenTelemetry” config page. This is not the org id embedded in theglc_token.<TOKEN>— a Grafana Cloud access-policy token (starts withglc_) scoped to write metrics, logs, and traces.
GRAFANA_OTLP_AUTH) at deploy time (see _grafana_basic_auth / _collector_secret_payload in src/otel_collector.py), so the raw glc_ token never reaches the collector container or the rendered config.
Setup
1
Add secrets to Infisical
Add these secrets to your Infisical project (prod environment):
Set them via the CLI:
2
Deploy the collector
Once secrets are set, deploy the otel-collector:At deploy time the raw
GRAFANA_INSTANCE_ID + GRAFANA_API_KEY are collapsed into the pre-encoded GRAFANA_OTLP_AUTH Basic credential and embedded in the collector’s secret, so when the container starts Grafana is already configured.3
Verify the configuration
Check that Grafana was included in the collector config:
How Grafana fits the collector
Grafana is one of the fan-out targets of the shared OTEL collector: apps spawn the collector Modal function over RPC, a localhost otelcol sidecar handles retry, queueing, and fan-out, and the Grafana exporter (otlphttp/grafana, Basic auth) ships alongside Dash0, HyperDX, and Logfire. See /telemetry/overview for the full architecture, and libs/telemetry.py / src/otel_collector.py for implementation details.
Troubleshooting
Secrets not found
Secrets not found
Verify the secrets exist in Infisical:
401 / 403 from the gateway
401 / 403 from the gateway
- Grafana Cloud uses Basic auth, not Bearer — a Bearer header returns 401. The collector handles this automatically; if you see 401s, re-check that
GRAFANA_INSTANCE_IDis the numeric OTLP-gateway instance id (not the org id) and that theglc_token’s access policy has write scope for the signals. - Confirm the endpoint region matches the stack the token belongs to.
Collector not starting
Collector not starting
Check the Modal logs for the otel-collector app:
No telemetry in Grafana
No telemetry in Grafana
- Verify the collector is running and Grafana is in the exporter list (see the verification step above).
- Check Modal logs for export errors.
- Verify the OTLP endpoint region is reachable and matches the token’s stack.
Mixing Grafana with other providers
Mixing Grafana with other providers
You can enable multiple providers simultaneously — the collector fans out to all configured exporters. Grafana coexists with Dash0, HyperDX, and Logfire.
Reference
- Grafana Cloud OTLP endpoint docs
- OpenTelemetry Collector OTLPHTTP Exporter
src/otel_collector.py— collector app and config builderlibs/telemetry.py— app-side telemetry initialization