#metrics #logging #observability #tracing #logging-tracing

emit_opentelemetry

向OpenTelemetry SDK发送诊断事件

9个版本

0.11.0-alpha.9 2024年8月21日
0.11.0-alpha.82024年8月15日
0.11.0-alpha.72024年7月31日
0.11.0-alpha.62024年6月28日

#33#observability

Download history 394/week @ 2024-06-03 304/week @ 2024-06-10 167/week @ 2024-06-24 54/week @ 2024-07-01 122/week @ 2024-07-29 119/week @ 2024-08-12

241 每月下载次数

MIT/Apache

225KB
4.5K SLoC

emit_opentelemetry

opentelemetry

当前文档

emit 与 OpenTelemetry SDK 集成。

该库将emit的诊断事件作为日志记录和跨度通过OpenTelemetry SDK转发。


lib.rs:

emit 与 OpenTelemetry SDK 集成。

该库将emit的诊断事件作为日志记录和跨度通过OpenTelemetry SDK转发。该库适用于已经使用OpenTelemetry SDK的应用程序。它也旨在用于需要将多个仪表库(如 emitlogtracing)统一到共享管道的应用程序。如果您只想通过OTLP将 emit 诊断发送到OpenTelemetry Collector或其他兼容服务,则请考虑使用 emit_otlp

入门

按照其文档配置OpenTelemetry,然后将 emitemit_opentelemetry 添加到您的 Cargo.toml

[dependencies.emit]
version = "0.11.0-alpha.9"

[dependencies.emit_opentelemetry]
version = "0.11.0-alpha.9"

使用 setup 初始化 emit 以通过OpenTelemetry SDK发送诊断

fn main() {
// Configure the OpenTelemetry SDK

let rt = emit_opentelemetry::setup().init();

// Your app code goes here

rt.blocking_flush(std::time::Duration::from_secs(30));

// Shutdown the OpenTelemetry SDK
}

必须设置 emitterctxt 的值,以便 emit 正确集成到OpenTelemetry SDK中。

由 [@emit::span] 宏产生的诊断事件在完成时被发送到 opentelemetry::global::tracer 作为 opentelemetry::trace::Span。所有其他发出的事件都以 opentelemetry::global::logger 的形式作为 opentelemetry::logs::LogRecord 发送。

限制

此库不支持将 emit 的指标作为 OpenTelemetry 指标。由 emit 生成的任何指标样本都将作为日志记录发出。

故障排除

如果您发现 emit 诊断流不符合预期地通过 OpenTelemetry SDK,您可以尝试配置 emit 的内部日志记录器,并从集成中收集指标。

use emit::metric::Source;

fn main() {
// 1. Initialize the internal logger
//    Diagnostics produced by `emit_opentelemetry` itself will go here
let internal = emit::setup()
.emit_to(emit_term::stdout())
.init_internal();

let mut reporter = emit::metric::Reporter::new();

let rt = emit_opentelemetry::setup()
.map_emitter(|emitter| {
// 2. Add `emit_opentelemetry`'s metrics to a reporter so we can see what it's up to
//    You can do this independently of the internal emitter
reporter.add_source(emitter.metric_source());

emitter
})
.init();

// Your app code goes here

rt.blocking_flush(std::time::Duration::from_secs(30));

// 3. Report metrics after attempting to flush
//    You could also do this periodically as your application runs
reporter.emit_metrics(&internal.emitter());
}

有关从其中获取诊断的详细信息,请参阅 opentelemetry 文档。

依赖关系

~4–5.5MB
~108K SLoC