#分布式跟踪 #honeycomb #跟踪层 #跟踪 #仪表化 #日志跟踪

tracing-honeycomb

Honeycomb.io跟踪层,用于多进程遥测

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-12020年3月10日

#400调试

Download history 29/week @ 2024-03-11 63/week @ 2024-03-18 30/week @ 2024-03-25 100/week @ 2024-04-01 47/week @ 2024-04-08 24/week @ 2024-04-15 36/week @ 2024-04-22 18/week @ 2024-04-29 23/week @ 2024-05-06 28/week @ 2024-05-13 22/week @ 2024-05-20 31/week @ 2024-05-27 18/week @ 2024-06-03 21/week @ 2024-06-10 23/week @ 2024-06-17 23/week @ 2024-06-24

87 每月下载次数
4 个crate中使用(通过 preroll

MIT 许可证

65KB
1K SLoC

tracing-honeycomb on crates.io Documentation (latest release) License

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 获取与当前跨度关联的 TraceIdSpanId

以下是一个它们可能一起使用的示例

  1. 使用新生成的 TraceId 将某个跨度注册为全局跟踪根。
  2. 该跨度的子跨度使用 current_dist_trace_ctx 获取当前的 TraceIdSpanId。它将这些值作为元数据与RPC请求一起传递。
  3. 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_ctxTraceCtx::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