Dynatrace Integration (OTLP)
This guide shows how to export OpenTelemetry traces to Dynatrace from the local stack, alongside Tempo.
Prerequisites
- Dynatrace environment with API access
- Two values:
- DT_OTLP_ENDPOINT: e.g.,
https://{your-env-id}.live.dynatrace.com/api/v2/otlp - DT_API_TOKEN: API token with
ingestscopes
- DT_OTLP_ENDPOINT: e.g.,
Configure the Collector
We provide an alternate Collector config that adds an OTLP HTTP exporter for Dynatrace and keeps local Tempo:
env/otel-collector/config.dynatrace.yaml
Key exporter settings:
exporters:
otlphttp/dynatrace:
endpoint: "${DT_OTLP_ENDPOINT}"
headers:
Authorization: "Api-Token ${DT_API_TOKEN}"
compression: gzip
timeout: 10s
Start the stack with Dynatrace enabled
Set environment variables and use the compose override:
export DT_OTLP_ENDPOINT="https://YOUR_ENV.live.dynatrace.com/api/v2/otlp"
export DT_API_TOKEN="<redacted>"
make start_observability_stack_dynatrace
This runs the same stack (Postgres, Pyroscope, Prometheus, Grafana, Tempo) with the Collector exporting to Dynatrace as well.
Run instrumented apps
Use the existing OTel binaries; they export to the local Collector which fans out to Tempo and Dynatrace:
make run_otel_generator_dynatrace
make run_otel_loader_dynatrace
Validation
- Collector logs will show outgoing requests to the Dynatrace endpoint (and still log/export to Tempo).
- In Dynatrace, check Traces/Services to see spans with your service names (e.g.,
interviewing-golang.generator-otel).
Notes & troubleshooting
- Ensure your token has correct scopes for OTLP ingest.
- Corporate proxies/firewalls may block outbound HTTPS to Dynatrace; configure networking as needed.
- You can revert to the standard config by using
make start_observability_stack. - This approach keeps vendor config isolated to an override file and environment variables, matching our professional standards.