otel-collector Modal app. The collector fans out every batch to all configured providers; the architecture itself is covered in Telemetry overview. This page covers only the Dash0-specific wiring: the collector registers an otlphttp/dash0 exporter and sends the Dash0-Dataset header when DASH0_DATASET is set.
Endpoints
Dash0 provides regional endpoints:- US:
https://otel-ingest.us.dash0.com - EU:
https://otel-ingest.eu.dash0.com
Setup
1
Add secrets to Infisical
Add three secrets to your Infisical project (prod environment):
You can set them from the CLI. Run this from the repo root:
2
Deploy the collector
Once the secrets are set, deploy the The collector image build fetches the secrets and embeds them, so when the container starts, Dash0 is already configured.
otel-collector app:3
Verify the configuration
Check that Dash0 was included in the collector config:
Output
4
Test the telemetry flow
Use the verification script to test end-to-end telemetry:
How Dash0 fits into the collector
Apps never talk to Dash0 directly. The app-side exporter inlibs/telemetry.py serializes each batch to OTLP protobuf and spawns the collector Modal function fire-and-forget; a localhost otelcol sidecar in that container handles retry, queueing, and fan-out to every configured provider, Dash0 included. See Telemetry overview for the full architecture, and src/otel_collector.py for the config builder.
Troubleshooting
Secrets not found
Secrets not found
Verify the secrets exist in Infisical:
Collector not starting
Collector not starting
Check the Modal logs for the Look for errors like “exporters config: *conf.ExportersConfig.Validate()…”, which indicate a config build error.
otel-collector app:No telemetry in Dash0
No telemetry in Dash0
- Verify the collector is running:
uv run modal serve src/otel_collector.py - Check Modal logs for export errors
- Verify the OTLP endpoint is reachable from the collector container
- Check that the Bearer token is valid
Mixing Dash0 with other providers
Mixing Dash0 with other providers
You can enable multiple providers simultaneously — the collector fans out to all configured exporters:
Reference
- Dash0 docs
- OpenTelemetry Collector OTLPHTTP exporter
src/otel_collector.py— collector app and config builderlibs/telemetry.py— app-side telemetry initialization