4 个版本 (2 个破坏性版本)
0.2.1 | 2024年2月10日 |
---|---|
0.2.0 | 2024年2月10日 |
0.1.6 | 2024年2月10日 |
0.1.5 |
|
0.0.1 | 2023年9月20日 |
在 网络编程 中排名 695
每月下载量 3,011
21KB
254 行
非官方的 Rust 服务 Datadog 追踪和日志关联。
此包包含连接 OpenTelemetry、追踪和 Datadog 之间差距所需的粘合剂。
功能
datadog-tracing
具有以下功能
- tracing:向 Datadog 代理发送追踪的 OpenTelemetry 追踪器/层的构建实用工具
- 日志关联:将追踪 ID 和跨度 ID 转换为 Datadog 本地格式,并将它们注入到
dd.trace_id
和dd.span_id
字段(更多信息) - 传播:设置 Datadog 传播者作为全局传播者的实用函数
- axum(通过
axum
功能启用):重新公开 axum-tracing-opentelemetry 的功能 - 具有偏好的追踪订阅者初始化函数,配置日志和 datadog 导出器。它是可选的,你可以构建自己的:它使用的函数是公开的。
配置
该库可以通过以下环境变量进行配置
环境变量 | 默认值 | 描述 |
---|---|---|
DD_ENABLED | false | 启用 datadog 导出器和日志上的 trace_id/span_id |
DD_SERVICE | Datadog 服务名称 | |
DD_AGENT_HOST | localhost | Datadog 代理主机 |
DD_AGENT_PORT | 8126 | Datadog 代理端口 |
RUST_LOG | info | |
AXUM_TRACING_LOG_LEVEL | 如果 DD_ENABLED=true,则 "trace",否则 "off" | |
OTEL_LOG_LEVEL | debug |
示例
进一步背景和理由
灵感
这个库高度受到了ddtrace crate的启发,它也是一种在追踪、OpenTelemetry和Datadog之间的粘合剂。主要区别在于它使用opentelemetry_otlp
导出器,而此库使用opentelemetry_datadog
,因此无需配置Datadog代理以通过OTLP接收追踪,默认的Datadog APM也能正常工作!
传播
两种常用的传播标准是B3
(OpenZipkin的传播风格)和Jaeger。OpenTelemetry支持这两种。
大多数Datadog SDK都支持B3
和Datadog原生传播风格。例如,Python的datadog-tracing
库支持B3
,但需要显式启用。
为了方便与其他语言编写的、使用官方Datadog SDK的服务集成,我们选择坚持使用Datadog风格的传播而不是B3
。这通过set_global_propagator
函数设置,该函数在创建追踪器时自动调用。
Reqwest传播
Python库会自动处理追踪上下文的传播。不幸的是,在Rust中我们需要手动处理。
在HTTP请求中的传播可能是最常见的需求。此crate不提供任何额外支持,但建议使用reqwest-middleware crate在使用reqwest
时注入必要的头信息。如果您使用datadog-tracing
设置全局传播器,它将直接工作。
use datadog-tracing::set_global_propagator;
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
use reqwest_tracing::TracingMiddleware;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let (_guard, tracer_shutdown) = datadog_tracing::init()?;
client = get_http_client();
// setup your app and inject the client
}
fn get_http_client() -> ClientWithMiddleware {
ClientBuilder::new(reqwest::Client::new())
.with(TracingMiddleware::default())
.build()
}
依赖
~15–32MB
~471K SLoC