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 调试
每月下载量 3,883
45KB
871 代码行
prima_tracing.rs
安装
从 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