20 个版本

0.10.0 2024 年 7 月 8 日
0.9.4 2024 年 5 月 20 日
0.9.0 2024 年 3 月 26 日
0.7.2 2023 年 10 月 26 日
0.2.0 2021 年 12 月 9 日

#140 in 调试

Download history 1060/week @ 2024-05-02 901/week @ 2024-05-09 909/week @ 2024-05-16 980/week @ 2024-05-23 932/week @ 2024-05-30 869/week @ 2024-06-06 594/week @ 2024-06-13 754/week @ 2024-06-20 804/week @ 2024-06-27 1066/week @ 2024-07-04 1003/week @ 2024-07-11 763/week @ 2024-07-18 1008/week @ 2024-07-25 799/week @ 2024-08-01 1201/week @ 2024-08-08 733/week @ 2024-08-15

每月下载量 3,883

MIT/Apache

45KB
871 代码行

prima_tracing.rs

用于配置支持日志记录和 opentelemetry 的 跟踪 订阅者的实用工具。

安装

crates.io 安装

prima-tracing = "0.9"

Cargo 功能

为了方便使用,您可以使用以下功能集

  • live 启用您可能在生产/预发布环境中需要的功能

  • dev 启用您可能在开发环境中需要的功能

  • json-logger 以 JSON 格式将跟踪输出到标准输出

  • datadog 使用 跟踪和跨度信息 扩展 json-logger 输出,允许 Datadog 连接日志和跟踪

  • traces 使用 opentelemetry-otlp 导出器导出 跟踪 跨度和事件

  • rt-tokio-current-thread 配置 OpenTelemetry 跟踪器使用 Tokio 的当前线程运行时(例如 actix_web::main)。如果没有此功能,默认使用 Tokio 多线程运行时。

如何本地收集跟踪

如果您在项目中使用 tracing 功能,在您的机器上查看导出的跟踪的推荐方法是使用 Jaeger all-in-one Docker 图像

您需要将以下服务添加到您的 Docker Compose 配置中(您的主容器应依赖于它)

  jaeger:
    image: jaegertracing/all-in-one:1.35
    ports:
      - 16686:16686
      - 55681:55681
    environment:
      COLLECTOR_OTLP_ENABLED: true
      COLLECTOR_OTLP_HTTP_HOST_PORT: 55681

然后您可以在浏览器中访问 Jaeger 网页界面 来搜索跟踪。

使用示例

简单

use prima_tracing::{builder, configure_subscriber, init_subscriber, Environment};
use tracing::{info, info_span};

fn main() -> std::io::Result<()> {
    let subscriber = configure_subscriber(
      builder("simple")
        .with_country(Country::Common)
        .with_env(Environment::Dev)
        .build()
    );

    let _guard = init_subscriber(subscriber);

    let span = info_span!("MySpan");
    let _guard = span.enter();

    info!("Starting my awesome app");
    Ok(())
}

JSON 输出

它类似于简单示例,但自动激活 json-logger 将使用 JSON 格式作为输出

use prima_tracing::{builder, configure_subscriber, init_subscriber, Environment};
use tracing::{info, info_span};

fn main() -> std::io::Result<()> {
    let subscriber = configure_subscriber(
      builder("json")
        .with_country(Country::Common)
        .with_env(Environment::Dev)
        .build()
    );

    let _guard = init_subscriber(subscriber);

    let span = info_span!("MySpan");
    let _guard = span.enter();

    info!("Starting my awesome app");
    Ok(())
}

OpenTelemetry

您需要本地运行 OpenTelemetry 收集器(例如 Jaeger)。

use prima_tracing::{builder, configure_subscriber, init_subscriber, Environment};
use tracing::{info, info_span};

fn main() -> std::io::Result<()> {
    let subscriber = configure_subscriber(
        builder("myapp")
            .with_country(Country::Common)
            .with_env(Environment::Dev)
            .with_version("1.0".to_string())
            .with_telemetry(
                "https://127.0.0.1:55681".to_string(),
                "myapp".to_string(),
            )
            .build(),
    );

    let _guard = init_subscriber(subscriber);

    let span = info_span!("MySpan");
    let _guard = span.enter();

    info!("Starting my awesome app");
    Ok(())
}

自定义订阅者

use prima_tracing::json;
use tracing::{info, info_span};
use tracing_log::LogTracer;
use tracing_subscriber::{layer::SubscriberExt, EnvFilter};

fn main() -> std::io::Result<()> {
    let subscriber = tracing_subscriber::Registry::default()
        .with(EnvFilter::from_default_env())
        .with(json::storage::layer())
        .with(json::formatter::layer("test".to_owned(), "dev".to_owned()));

    LogTracer::init().expect("Failed to set logger");
    tracing::subscriber::set_global_default(subscriber).expect("Setting default subscriber failed");

    let span = info_span!("MySpan");
    let _guard = span.enter();

    info!("Starting my awesome app");
    Ok(())
}

运行示例

简单

RUST_LOG=info cargo run --example simple

复杂(OpenTelemetry)

本地运行 Jaeger

docker run --rm -d -p 16686:16686 -p 55681:55681 -e COLLECTOR_OTLP_ENABLED=true -e COLLECTOR_OTLP_HTTP_HOST_PORT=55681 jaegertracing/all-in-one:1.35

运行 pong 服务

RUST_LOG=info cargo run --features=traces --example pong

运行 ping 服务

RUST_LOG=info cargo run --features=traces --example ping

检查 ping 服务的健康状态(调用 pong 服务)

curl https://127.0.0.1:8081/check

https://127.0.0.1:16686 打开浏览器以检查已追踪的请求

OpenTelemetry + JSON 记录器与 Datadog 关联 ID

RUST_LOG=info cargo run --features=datadog,traces --example datadog_json_logger

自定义格式化器

RUST_LOG=info cargo run --features=json-logger --example custom_formatter

具有默认 JSON 输出的自定义订阅者

RUST_LOG=info cargo run --features=json-logger --example custom-subscriber

具有自定义 JSON 输出的自定义订阅者

RUST_LOG=info cargo run --features=json-logger --example custom-json-subscriber

依赖项

~7–21MB
~317K SLoC