16 releases (5 breaking)
Uses new Rust 2024
| 0.6.1 | Jan 5, 2026 |
|---|---|
| 0.6.0 | Dec 18, 2025 |
| 0.5.1 | Nov 25, 2025 |
| 0.4.3 | Nov 21, 2025 |
| 0.1.0 | Nov 6, 2025 |
#652 in Profiling
Used in 2 crates
53KB
1K
SLoC
tracing-datadog
A tracing exporter layer for Datadog, without dependencies on opentelemetry.
- Exporter for
tracingtraces to Datadog APM - (Optional) Datadog-compatible log formatting and APM ↔ log correlation
- (Optional) Distributed tracing support for HTTP requests via W3C Trace Context headers or Datadog's proprietary headers
- (Optional) Container-ID tracking for infrastructure metrics in APM
Crate features
ahash- Use AHashMaps instead ofstdHashMaps for performancehttp- HTTP Trace Context header support (W3C Trace Context and Datadog)
Usage
To enable both trace data and log collection, use the DatadogTraceLayer layer
in your tracing subscriber:
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use tracing_datadog::DatadogTraceLayer;
tracing_subscriber::registry()
.with(
DatadogTraceLayer::builder()
.service("my-service")
.env("production")
.version("git sha")
.agent_address("localhost:8126")
.enable_logs(true)
.build()
.expect("failed to build DatadogTraceLayer"),
)
.init();
Logs will be emitted to stdout in the Datadog JSON format.
Span tag semantics
Certain span tags have special meaning in Datadog:
service- can be used to override the service on a per-span basisoperation- maps to Datadog APM operationsresource- maps to Datadog APM resourcesspan.kind- defaults tointernal, but can be set toclient,server,producer, orconsumer. Internal spans do not generate trace metrics.span.type- defaults tocustom, but can be set towebfor request handlers,httpfor HTTP client requests, or any ofsql,cassandra,memcached,mongodb,elasticsearch,opensearch,redis, ordbfor data store queries.customcan be used for any other type of span.
There are few other semantic conventions, like the ones for errors. This page lists a lot of them.
Distributed tracing over HTTP
To enable distributed tracing over HTTP, enable the http feature and use
DatadogContext to extract and inject trace context from/into HTTP headers.
See the API documentation for examples.
Prior Art
Some code has been adopted for the following projects:
See also komoju-datadog for opinionated usage of this library.
Dependencies
~15–32MB
~332K SLoC