6个版本
0.4.3 | 2021年12月27日 |
---|---|
0.4.2 | 2021年6月28日 |
0.4.1 | 2021年5月25日 |
0.3.0 | 2021年4月15日 |
0.1.0-alpha-1 | 2020年3月10日 |
#400 在 调试
87 每月下载次数
在 4 个crate中使用(通过 preroll)
65KB
1K SLoC
tracing-honeycomb
此crate提供
- 一个跟踪层
TelemetryLayer
,可用于将跟踪数据发布到honeycomb.io - 用于实现针对honeycomb.io后端的分布式跟踪的实用工具
作为跟踪层,TelemetryLayer
可以与其他层组合,提供标准输出日志、过滤等功能。
用法
要将以下内容添加到你的Cargo.toml中,以开始使用。
tracing-honeycomb = "0.4.1"
传播分布式跟踪元数据
此crate提供了两个函数,用于与TelemetryLayer
进行带外交互
register_dist_tracing_root
将当前跨度注册为分布式跟踪的本地根。current_dist_trace_ctx
获取与当前跨度关联的TraceId
和SpanId
。
以下是一个它们可能一起使用的示例
- 使用新生成的
TraceId
将某个跨度注册为全局跟踪根。 - 该跨度的子跨度使用
current_dist_trace_ctx
获取当前的TraceId
和SpanId
。它将这些值作为元数据与RPC请求一起传递。 - RPC服务处理程序使用请求元数据中提供的
TraceId
和远程父SpanId
来注册处理程序函数的跨度,将其作为第1步中启动的分布式跟踪的本地根。
注册全局订阅者
以下示例显示了如何通过将TelemetryLayer
与其他层和由tracing_subscriber
crate提供的Registry
订阅者组合来创建和注册订阅者。
let honeycomb_config = libhoney::Config {
options: libhoney::client::Options {
api_key: honeycomb_key,
dataset: "my-dataset-name".to_string(),
..libhoney::client::Options::default()
},
transmission_options: libhoney::transmission::Options::default(),
};
let telemetry_layer = mk_honeycomb_tracing_layer("my-service-name", honeycomb_config);
// NOTE: the underlying subscriber MUST be the Registry subscriber
let subscriber = registry::Registry::default() // provide underlying span data store
.with(LevelFilter::INFO) // filter out low-level debug tracing (eg tokio executor)
.with(tracing_subscriber::fmt::Layer::default()) // log to stdout
.with(telemetry_layer); // publish to honeycomb backend
tracing::subscriber::set_global_default(subscriber).expect("setting global default failed");
测试
由于只要将某些TelemetryLayer
注册为层/订阅者堆栈的一部分,并且当前跨度是活动的,就可以期望TraceCtx::current_trace_ctx
和TraceCtx::record_on_current_span
返回Ok
,因此,如果它们不成功,则可以合法地使用.expect
来使它们总是成功,并在它们不成功时引发panic。因此,您可能会发现自己编写的代码在没有分布式跟踪上下文的情况下失败。这意味着覆盖此类代码的单元和集成测试必须提供TelemetryLayer
。然而,在运行单元或集成测试时,您可能不想发布遥测数据。您可以通过注册使用BlackholeTelemetry
构建的TelemetryLayer
来解决这个问题。BlackholeTelemetry
会丢弃跨度,但不会将它们发布到任何后端。
let telemetry_layer = mk_honeycomb_blackhole_tracing_layer();
// NOTE: the underlying subscriber MUST be the Registry subscriber
let subscriber = registry::Registry::default() // provide underlying span data store
.with(LevelFilter::INFO) // filter out low-level debug tracing (eg tokio executor)
.with(tracing_subscriber::fmt::Layer::default()) // log to stdout
.with(telemetry_layer); // publish to blackhole backend
tracing::subscriber::set_global_default(subscriber).expect("setting global default failed");
许可证
MIT
依赖关系
~10–15MB
~298K SLoC