#jaeger #open-telemetry #tracing #async

ts_opentelemetry_jaeger

OpenTelemetry Jaeger导出器的分支

1 个不稳定发布

0.19.0-beta.12023年6月13日

#22#jaeger

Apache-2.0

365KB
5K SLoC

OpenTelemetry — An observability framework for cloud-native software.

OpenTelemetry Jaeger

为使用 OpenTelemetry 仪器化的应用程序提供 Jaeger 集成。这包括 Jaeger 导出器和 Jaeger 传播器。

Crates.io: opentelemetry-jaeger Documentation LICENSE

概述

OpenTelemetry 是一系列工具、API 和 SDK 的集合,用于为分析目的仪器化、生成、收集和导出遥测数据(指标、日志和跟踪),以了解您软件的性能和行为。此crate提供了一个跟踪管道和导出器,用于将跟踪信息发送到 Jaeger agentcollector 端点以进行处理和可视化。

编译器支持:需要 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(())
}

Jaeger UI

性能

为了获得最佳性能,建议使用批量导出器,因为简单导出器会在丢弃时同步导出每个跟踪。您可以通过启用 rt-tokiort-tokio-current-threadrt-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