1 个不稳定发布
0.19.0-beta.1 | 2023年6月13日 |
---|
#22 在 #jaeger
365KB
5K SLoC
OpenTelemetry Jaeger
为使用 OpenTelemetry
仪器化的应用程序提供 Jaeger 集成。这包括 Jaeger 导出器和 Jaeger 传播器。
概述
OpenTelemetry
是一系列工具、API 和 SDK 的集合,用于为分析目的仪器化、生成、收集和导出遥测数据(指标、日志和跟踪),以了解您软件的性能和行为。此crate提供了一个跟踪管道和导出器,用于将跟踪信息发送到 Jaeger agent
或 collector
端点以进行处理和可视化。
编译器支持:需要 rustc
1.60+
快速入门
首先确保您有一个正在运行的 Jaeger 实例,您想要向其发送数据
$ docker run -d -p6831:6831/udp -p6832:6832/udp -p16686:16686 -p14268:14268 jaegertracing/all-in-one:latest
然后安装一个新的 jaeger 管道,使用推荐默认值以开始导出遥测
use opentelemetry::global;
use opentelemetry::trace::Tracer;
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new());
let tracer = opentelemetry_jaeger::new_agent_pipeline().install_simple()?;
tracer.in_span("doing_work", |cx| {
// Traced app logic here...
});
global::shutdown_tracer_provider(); // sending remaining spans
Ok(())
}
性能
为了获得最佳性能,建议使用批量导出器,因为简单导出器会在丢弃时同步导出每个跟踪。您可以通过启用 rt-tokio
、rt-tokio-current-thread
或 rt-async-std
功能,并在管道构建器上指定一个运行时来自动为您配置批量导出器。
[dependencies]
opentelemetry = { version = "*", features = ["rt-tokio"] }
opentelemetry-jaeger = { version = "*", features = ["rt-tokio"] }
let tracer = opentelemetry_jaeger::new_agent_pipeline()
.install_batch(opentelemetry::runtime::Tokio)?;
从环境变量配置 Jaeger 导出器
Jaeger 管道构建器可以通过环境变量动态配置。所有变量都是可选的,可以在 jaeger 变量规范 中找到接受的选项的完整列表。
Jaeger 收集器示例
如果您想跳过代理并直接将跟踪提交到 Jaeger 收集器,您可以为此 crate 启用可选的 collector_client
功能。此示例假定 Jaeger 收集器正在 https://127.0.0.1:14268
上运行。
[dependencies]
opentelemetry-jaeger = { version = "..", features = ["isahc_collector_client"] }
然后您可以使用with_collector_endpoint
方法来指定端点
// Note that this requires one of the following features enabled so that there is a default http client implementation
// * hyper_collector_client
// * surf_collector_client
// * reqwest_collector_client
// * reqwest_blocking_collector_client
// * reqwest_rustls_collector_client
// * isahc_collector_client
// You can also provide your own implementation by enable
// `collector_client` and set it with
// new_pipeline().with_http_client() method.
use opentelemetry::trace::Tracer;
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
let tracer = opentelemetry_jaeger::new_collector_pipeline()
.with_endpoint("https://127.0.0.1:14268/api/traces")
// optionally set username and password as well.
.with_username("username")
.with_password("s3cr3t")
.install_batch()?;
tracer.in_span("doing_work", |cx| {
// Traced app logic here...
});
opentelemetry::global::shutdown_tracer_provider(); // sending remaining spans
Ok(())
}
完整配置示例
示例展示了如何覆盖所有配置选项。有关每个选项的详细信息,请参阅PipelineBuilder
文档。
支持的Rust版本
OpenTelemetry基于最新稳定版构建。最低支持的版本是1.60。当前OpenTelemetry版本在低于最低支持版本的Rust版本上构建不能保证。
当前稳定Rust编译器和它之前最近的三个次版本将始终受到支持。例如,如果当前稳定编译器版本是1.49,则最低支持版本不会超过1.46,即三个次版本之前。只要这样做符合此政策,增加最低支持编译器版本不被视为semver破坏性更改。
依赖项
~3–20MB
~307K SLoC