Join us from October 8-10 in New York City to learn the latest tips, trends, and news about GraphQL Federation and API platform engineering.Join us for GraphQL Summit 2024 in NYC
Docs
Start for Free

Datadog exporter (via OTLP)

Configure the Datadog exporter for tracing


Enable and configure the Datadog exporter for tracing in the or .

For general tracing configuration, refer to Router Tracing Configuration.

OTLP configuration

To export traces to Datadog via OTLP, you must do the following:

  • Configure the Datadog agent to accept OTLP traces.
  • Configure the to send traces to the Datadog agent.

To configure the Datadog agent, add OTLP configuration to your datadog.yaml. For example:

datadog.yaml
otlp_config:
receiver:
protocols:
grpc:
endpoint: <dd-agent-ip>:4317

To configure the router, enable the OTLP exporter and set endpoint: <datadog-agent-endpoint>. For example:

router.yaml
telemetry:
exporters:
tracing:
otlp:
enabled: true
# Optional endpoint, either 'default' or a URL (Defaults to http://127.0.0.1:4317)
endpoint: "${env.DATADOG_AGENT_HOST}:4317"

For more details about Datadog configuration, see Datadog Agent configuration.

Enabling log correlation

To enable Datadog log correlation, you must configure dd.trace_id to appear on the router span:

router.yaml
telemetry:
instrumentation:
spans:
mode: spec_compliant
router:
attributes:
dd.trace_id: true

Your JSON formatted log messages will automatically output dd.trace_id on each log message if dd.trace_id was detected on the router span.

Datadog native configuration

⚠️ CAUTION

Native Datadog tracing is not part of the OpenTelemetry spec, and given that Datadog supports OTLP we will be deprecating native Datadog tracing in the future. Use OTLP configuration instead.

The router can be configured to connect to either the native, default Datadog agent address or a URL:

router.yaml
telemetry:
exporters:
tracing:
datadog:
enabled: true
# Optional endpoint, either 'default' or a URL (Defaults to http://127.0.0.1:8126)
endpoint: "http://${env.DATADOG_AGENT_HOST}:8126"
# Enable graphql.operation.name attribute on supergraph spans.
instrumentation:
spans:
mode: spec_compliant
supergraph:
attributes:
graphql.operation.name: true

enabled

Set to true to enable the Datadog exporter. Defaults to false.

enable_span_mapping (default: true)

There are some incompatibilities between Datadog and OpenTelemetry, the Datadog exporter might not provide meaningful contextual information in the exported spans. To fix this, you can configure the router to perform a mapping for the span name and the span resource name.

router.yaml
telemetry:
exporters:
tracing:
datadog:
enabled: true
enable_span_mapping: true

With enable_span_mapping: true, the router performs the following mapping:

  1. Use the OpenTelemetry span name to set the Datadog span .
  2. Use the OpenTelemetry span attributes to set the Datadog span resource name.

Example trace

For example, assume a client sends a MyQuery to the router. The router's sends a query to my-subgraph-name and creates the following trace:

| apollo_router request |
| apollo_router router |
| apollo_router supergraph |
| apollo_router query_planning | apollo_router execution |
| apollo_router fetch |
| apollo_router subgraph |
| apollo_router subgraph_request |

As you can see, there is no clear information about the name of the query, the name of the subgraph, and the name of the query sent to the subgraph.

Instead, when enable_span_mapping is set to true the following trace will be created:

| request /graphql |
| router /graphql |
| supergraph MyQuery |
| query_planning MyQuery | execution |
| fetch fetch |
| subgraph my-subgraph-name |
| subgraph_request MyQuery__my-subgraph-name__0 |

fixed_span_names (default: true)

When fixed_span_names: true, the apollo router to use the original span names instead of the dynamic ones as described by OTel semantic conventions.

router.yaml
telemetry:
exporters:
tracing:
datadog:
enabled: true
fixed_span_names: true

This will allow you to have a finite list of in Datadog on the APM view.

resource_mapping

When set, resource_mapping allows you to specify which attribute to use in the Datadog APM and Trace view. The default resource mappings are:

OpenTelemetry Span NameDatadog Span Operation Name
requesthttp.route
routerhttp.route
supergraphgraphql.operation.name
query_planninggraphql.operation.name
subgraphsubgraph.name
subgraph_requestgraphql.operation.name
http_requesthttp.route

You may override these mappings by specifying the resource_mapping configuration:

router.yaml
telemetry:
exporters:
tracing:
datadog:
enabled: true
resource_mapping:
# Use `my.span.attribute` as the resource name for the `router` span
router: "my.span.attribute"
instrumentation:
spans:
router:
attributes:
# Add a custom attribute to the `router` span
my.span.attribute:
request_header: x-custom-header

batch_processor

All exporters support configuration of a batch span processor with batch_processor.

You must tune your batch_processor configuration if you see any of the following messages in your logs:

  • OpenTelemetry trace error occurred: cannot send span to the batch span processor because the channel is full

  • OpenTelemetry metrics error occurred: cannot send span to the batch span processor because the channel is full

The exact settings depend on the bandwidth available for you to send data to your application peformance monitor (APM) and the bandwidth configuration of your APM. Expect to tune these settings over time as your application changes.

telemetry:
exporters:
tracing:
datadog:
batch_processor:
max_export_batch_size: 512
max_concurrent_exports: 1
max_export_timeout: 30s
max_queue_size: 2048
scheduled_delay: 5s

batch_processor configuration reference

AttributeDefaultDescription
scheduled_delay5sThe delay in seconds from receiving the first span to sending the batch.
max_concurrent_exports1The maximum number of overlapping export requests.
max_export_batch_size512The number of spans to include in a batch. May be limited by maximum message size limits.
max_export_timeout30sThe timeout in seconds for sending spans before dropping the data.
max_queue_size2048The maximum number of spans to be buffered before dropping span data.

Datadog native configuration reference

AttributeDefaultDescription
enabledfalseEnable the OTLP exporter.
enable_span_mappingfalseIf span mapping should be used.
endpointhttp://localhost:8126/v0.4/tracesThe endpoint to send spans to.
batch_processorThe batch processor settings.
Previous
Configuration
Next
Dynatrace
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc., d/b/a Apollo GraphQL.

Privacy Policy

Company