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

  1. Log in to your Firetiger account
  2. Navigate to Data Connections → OpenTelemetry
  3. 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

  1. Restart the Datadog Agent after configuration changes
  2. Check agent status:
    datadog-agent status
    
  3. Look for the APM section – it should show your configured endpoint
  4. Generate some traffic in your application
  5. Log in to Firetiger and check for trace data under traces
  6. 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 status or docker logs <agent-container>

No metric data appearing in Firetiger?

  • Confirm you set DD_DD_URL (Firetiger-only) or DD_ADDITIONAL_ENDPOINTS (dual-write) – these are separate from the APM trace variables
  • Do not confuse DD_ADDITIONAL_ENDPOINTS (metrics) with DD_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' | base64 with 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_ENDPOINTS is 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

This site uses Just the Docs, a documentation theme for Jekyll.