9个版本
新 0.11.0-alpha.9 | 2024年8月21日 |
---|---|
0.11.0-alpha.8 | 2024年8月15日 |
0.11.0-alpha.7 | 2024年7月31日 |
0.11.0-alpha.6 | 2024年6月28日 |
#33 在 #observability
241 每月下载次数
225KB
4.5K SLoC
emit_opentelemetry
将 emit
与 OpenTelemetry SDK 集成。
该库将emit的诊断事件作为日志记录和跨度通过OpenTelemetry SDK转发。
lib.rs
:
将 emit
与 OpenTelemetry SDK 集成。
该库将emit的诊断事件作为日志记录和跨度通过OpenTelemetry SDK转发。该库适用于已经使用OpenTelemetry SDK的应用程序。它也旨在用于需要将多个仪表库(如 emit
、log
和 tracing
)统一到共享管道的应用程序。如果您只想通过OTLP将 emit
诊断发送到OpenTelemetry Collector或其他兼容服务,则请考虑使用 emit_otlp
。
入门
按照其文档配置OpenTelemetry,然后将 emit
和 emit_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
}
必须设置 emitter
和 ctxt
的值,以便 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