Skip to main content

Endpoints

Grafana Cloud exposes a region-scoped OTLP gateway:
Find your exact URL on the Grafana Cloud “OpenTelemetry” (OTLP) config page for your stack — for example 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

Unlike Dash0 and Logfire (which use Bearer) or HyperDX (which expects the raw key with no prefix), Grafana Cloud’s OTLP gateway authenticates with HTTP Basic auth. Sending a Bearer header returns a 401.
  • <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 the glc_ token.
  • <TOKEN> — a Grafana Cloud access-policy token (starts with glc_) scoped to write metrics, logs, and traces.
You do not encode this yourself. Set the two raw values as Infisical secrets and the collector derives the base64 credential (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

Verify the secrets exist in Infisical:
  • 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_ID is the numeric OTLP-gateway instance id (not the org id) and that the glc_ token’s access policy has write scope for the signals.
  • Confirm the endpoint region matches the stack the token belongs to.
Check the Modal logs for the otel-collector app:
  1. Verify the collector is running and Grafana is in the exporter list (see the verification step above).
  2. Check Modal logs for export errors.
  3. Verify the OTLP endpoint region is reachable and matches the token’s stack.
You can enable multiple providers simultaneously — the collector fans out to all configured exporters. Grafana coexists with Dash0, HyperDX, and Logfire.

Reference

Last modified on August 24, 2026