#otlp #open-telemetry #logging-tracing #logging #tracing

otlp-logger

一个简单的便利包,用于配置带有 Tokio Tracing 的 OpenTelemetry otlp 端点

3 个版本 (破坏性更新)

0.3.0 2024 年 4 月 21 日
0.2.0 2024 年 4 月 16 日
0.1.0 2024 年 4 月 10 日

#396 in 调试

Download history 10/week @ 2024-04-26 3/week @ 2024-05-17 2/week @ 2024-05-24 1/week @ 2024-06-07 3/week @ 2024-06-28 13/week @ 2024-07-05

每月 113 次下载

Apache-2.0

27KB
315

crates.io build

otlp-logger

使用 Tokio Tracing 的 OpenTelemetry 日志

这个包提供了一种方便的方式,使用 otlp 端点初始化 OpenTelemetry 日志。它使用 opentelemetrytracing 包提供结构化、上下文感知的日志记录,适用于 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_levelmetrics_levelstdout_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