3 个版本 (破坏性更新)
0.3.0 | 2024 年 4 月 21 日 |
---|---|
0.2.0 | 2024 年 4 月 16 日 |
0.1.0 | 2024 年 4 月 10 日 |
#396 in 调试
每月 113 次下载
27KB
315 行
otlp-logger
使用 Tokio Tracing 的 OpenTelemetry 日志
这个包提供了一种方便的方式,使用 otlp 端点初始化 OpenTelemetry 日志。它使用 opentelemetry
和 tracing
包提供结构化、上下文感知的日志记录,适用于 Rust 应用程序。
只需将以下内容添加到你的 Cargo.toml
[dependencies]
tracing = "0.1"
otlp-logger = "0.3"
tokio = { version = "1.37", features = ["rt", "macros"] }
因为这个包使用了 OpenTelemetry SDK 的批处理功能,所以需要使用 tokio
运行时。由于这个要求,必须在你的 Cargo.toml
文件中将 tokio
包添加为依赖项。
在你的代码中使用以下代码初始化日志记录器
#[tokio::main]
async fn main() {
// Initialize the OpenTelemetry logger using environment variables
otlp_logger::init().await;
// ... your application code
// and optionally call open telemetry logger shutdown to make sure all the
// data is sent to the configured endpoint before the application exits
otlp_logger::shutdown();
}
如果设置了环境变量 OTEL_EXPORTER_OTLP_ENDPOINT
,则使用 OpenTelemetry 日志记录器。否则,日志记录器默认只输出到 stdout。
可以使用以下环境变量配置 OpenTelemetry 日志记录器
OTEL_EXPORTER_OTLP_ENDPOINT
: 发送 OTLP 数据的端点。OTEL_SERVICE_NAME
: 服务的名称。OTEL_SERVICE_NAMESPACE
: 服务的命名空间。OTEL_SERVICE_VERSION
: 服务的版本。OTEL_SERVICE_INSTANCE_ID
: 服务的实例 ID。OTEL_DEPLOYMENT_ENVIRONMENT
: 服务的部署环境。
还可以使用 OtlpConfig
结构体配置 OpenTelemetry 日志记录器,该结构体可以传递给 init_with_config
函数。可以使用 OtlpConfigBuilder
结构体构建 OtlpConfig
结构体。
初始化日志记录器后,可以使用 tracing
宏来记录消息。例如
use tracing::{info, error};
#[tokio::main]
async fn main() {
otlp_logger::init().await;
info!("This is an info message");
error!("This is an error message");
}
跟踪、指标和日志被发送到配置的OTLP端点。跟踪、指标和日志级别通过RUST_LOG环境变量进行配置。可以通过设置trace_level
、metrics_level
或stdout_level
字段在OtlpConfig
结构中来覆盖此行为。
use otlp_logger::{OtlpConfigBuilder, LevelFilter};
#[tokio::main]
async fn main() {
let config = OtlpConfigBuilder::default()
.otlp_endpoint("https://127.0.0.1:4317".to_string())
.metrics_level(LevelFilter::TRACE)
.trace_level(LevelFilter::INFO)
.stdout_level(LevelFilter::ERROR)
.build()
.expect("failed to create otlp config builder");
otlp_logger::init_with_config(config).await.expect("failed to initialize logger");
// ... your application code
// shutdown the logger
otlp_logger::shutdown();
}
OtlpConfig
结构还允许您配置指标聚合。在底层,默认的聚合由OpenTelemetry SDK的DefaultAggregationSelector提供。可以通过在OtlpConfig
结构中设置metrics_aggregation
字段来覆盖默认值。metrics_aggregation
字段的数据类型为MetricsAggregationConfig
,可以使用MetricsAggregationConfigBuilder
结构来构建。
use otlp_logger::{OtlpConfig, MetricsAggregation, MetricsAggregationConfig};
#[tokio::main]
async fn main() {
let metrics = MetricsAggregationConfig::builder()
.histogram(MetricsAggregation::ExplicitBucketHistogram {
boundaries: vec![
0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, 750.0, 1000.0
],
record_min_max: true,
}).build().expect("valid aggregation");
let config = OtlpConfig::builder()
.otlp_endpoint("https://127.0.0.1:4317".to_string())
.metrics_aggregation(metrics)
.build()
.expect("failed to create otlp config builder");
otlp_logger::init_with_config(config).await.expect("failed to initialize logger");
// ... your application code
// shutdown the logger
otlp_logger::shutdown();
}
当前版本:0.3.0
许可证:Apache-2.0
依赖关系
~11–15MB
~260K SLoC