Forward Traces and Metrics from a Datadog Agent to Firetiger
This guide covers configuring a Datadog Agent to forward APM traces and metrics to Firetiger, where they are converted to OpenTelemetry format and stored in Iceberg.
For log forwarding, see DataDog Log Forwarding.
Prerequisites
- An active Firetiger deployment
- Datadog Agent v7+ running in your environment
- Firetiger credentials from the Data Connections page
Your Firetiger ingest endpoint for Datadog data is:
https://ingest.{deployment_name}.firetigerapi.com/datadog
Step 1: Build your Firetiger API key
- Log in to your Firetiger account
- Navigate to Data Connections → OpenTelemetry
- Note the Username and Password shown on the page
The Datadog Agent takes a single DD_API_KEY string, so you need to combine the
username and password into one Base64 token:
# Linux / macOS
echo -n 'USERNAME:PASSWORD' | base64
Replace USERNAME and PASSWORD with the values from the Data Connections page.
Use the resulting Base64 string wherever <firetiger_base64_token> appears below.
Option A: Firetiger Only
Replace the Datadog backend entirely. All trace and/or metric data flows to Firetiger.
The Datadog Agent treats API key values as opaque strings, so the Firetiger token works without issues.
Traces only
DD_API_KEY=<firetiger_base64_token>
DD_APM_DD_URL=https://ingest.{deployment_name}.firetigerapi.com/datadog
Metrics only
DD_API_KEY=<firetiger_base64_token>
DD_DD_URL=https://ingest.{deployment_name}.firetigerapi.com/datadog
Traces + Metrics
DD_API_KEY=<firetiger_base64_token>
DD_APM_DD_URL=https://ingest.{deployment_name}.firetigerapi.com/datadog
DD_DD_URL=https://ingest.{deployment_name}.firetigerapi.com/datadog
Option B: Dual-Write (Datadog + Firetiger)
Keep sending data to Datadog AND add Firetiger as an additional destination. Your existing Datadog setup remains unchanged.
The Datadog Agent natively supports additional endpoint variables – a JSON map of {url: [api_keys]}. Each endpoint gets its own API key. The real Datadog key stays in DD_API_KEY for the primary destination.
Traces only
DD_API_KEY=<your-real-datadog-api-key>
DD_APM_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
Metrics only
DD_API_KEY=<your-real-datadog-api-key>
DD_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
Traces + Metrics
DD_API_KEY=<your-real-datadog-api-key>
DD_APM_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
DD_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
DD_APM_ADDITIONAL_ENDPOINTS is used by APM trace forwarding, while DD_ADDITIONAL_ENDPOINTS is used by the metrics forwarder.
Configuration Examples
Docker (Firetiger Only – Traces + Metrics)
docker run -d \
-e DD_API_KEY="<firetiger_base64_token>" \
-e DD_APM_DD_URL="https://ingest.{deployment_name}.firetigerapi.com/datadog" \
-e DD_DD_URL="https://ingest.{deployment_name}.firetigerapi.com/datadog" \
-e DD_APM_ENABLED=true \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
gcr.io/datadoghq/agent:7
Docker (Dual-Write – Traces + Metrics)
docker run -d \
-e DD_API_KEY="<your-real-datadog-api-key>" \
-e DD_APM_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}' \
-e DD_ADDITIONAL_ENDPOINTS='{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}' \
-e DD_APM_ENABLED=true \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
gcr.io/datadoghq/agent:7
Docker Compose (Firetiger Only)
services:
datadog-agent:
image: gcr.io/datadoghq/agent:7
environment:
DD_API_KEY: "<firetiger_base64_token>"
DD_APM_DD_URL: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
DD_DD_URL: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
DD_APM_ENABLED: "true"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
Docker Compose (Dual-Write)
services:
datadog-agent:
image: gcr.io/datadoghq/agent:7
environment:
DD_API_KEY: "<your-real-datadog-api-key>"
DD_APM_ADDITIONAL_ENDPOINTS: '{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
DD_ADDITIONAL_ENDPOINTS: '{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
DD_APM_ENABLED: "true"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
Kubernetes Helm (Firetiger Only)
In your values.yaml for the Datadog Helm chart:
datadog:
apiKey: "<firetiger_base64_token>"
apm:
portEnabled: true
env:
- name: DD_APM_DD_URL
value: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
- name: DD_DD_URL
value: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
Kubernetes Helm (Dual-Write)
datadog:
apiKey: "<your-real-datadog-api-key>"
apm:
portEnabled: true
env:
- name: DD_APM_ADDITIONAL_ENDPOINTS
value: '{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
- name: DD_ADDITIONAL_ENDPOINTS
value: '{"https://ingest.{deployment_name}.firetigerapi.com/datadog": ["<firetiger_base64_token>"]}'
datadog.yaml (Firetiger Only)
api_key: "<firetiger_base64_token>"
apm_config:
enabled: true
apm_dd_url: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
dd_url: "https://ingest.{deployment_name}.firetigerapi.com/datadog"
datadog.yaml (Dual-Write)
api_key: "<your-real-datadog-api-key>"
apm_config:
enabled: true
additional_endpoints:
"https://ingest.{deployment_name}.firetigerapi.com/datadog":
- "<firetiger_base64_token>"
additional_endpoints:
"https://ingest.{deployment_name}.firetigerapi.com/datadog":
- "<firetiger_base64_token>"
Verify
- Restart the Datadog Agent after configuration changes
- Check agent status:
datadog-agent status - Look for the APM section – it should show your configured endpoint
- Generate some traffic in your application
- Log in to Firetiger and check for trace data under traces
- Check for metric data under metrics – it may take a few minutes for the agent to flush its first metric payload
Troubleshooting
No trace data appearing in Firetiger?
- Verify the ingest endpoint URL matches
https://ingest.{deployment_name}.firetigerapi.com/datadog - Check that APM is enabled on the agent (
DD_APM_ENABLED=true) - Ensure your application is instrumented with a Datadog tracing library and sending traces to the agent
- Check agent logs for connection errors:
datadog-agent statusordocker logs <agent-container>
No metric data appearing in Firetiger?
- Confirm you set
DD_DD_URL(Firetiger-only) orDD_ADDITIONAL_ENDPOINTS(dual-write) – these are separate from the APM trace variables - Do not confuse
DD_ADDITIONAL_ENDPOINTS(metrics) withDD_APM_ADDITIONAL_ENDPOINTS(traces) – they control different forwarders - Metrics are batched by the agent and flushed periodically; wait at least 2 minutes after restarting the agent
- For containerized agents, DogStatsD must be enabled if you want custom metrics (
DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true)
Authentication errors (401)?
- Go to Data Connections → OpenTelemetry and verify your username and password
- Re-run
echo -n 'USERNAME:PASSWORD' | base64with the correct values - Ensure the Base64 token is copied exactly with no extra whitespace or quotes
- Verify there are no escaping issues in your environment variables
Agent startup warnings about /api/v1/validate?
- These warnings are harmless and do not affect trace or metric delivery
- Firetiger handles this endpoint for connectivity checks
Dual-write not working?
- Verify the JSON format of
DD_APM_ADDITIONAL_ENDPOINTS/DD_ADDITIONAL_ENDPOINTSis correct - The value must be a JSON object mapping URL to an array of API keys
- Check for proper escaping in your shell or YAML configuration