#exporter #otlp #open-telemetry

otlp-exporter

OpenTelemetry Collector的OTLP导出器

1个不稳定版本

0.1.0 2023年8月16日

#642 in 调试

自定义许可

72KB
1.5K SLoC

这是一个个人项目。它仍在开发中。请自行承担风险使用。

导出器以OTLP格式导出跟踪、指标和日志数据。

支持矩阵

协议

协议 跟踪 指标 日志
grpc(tonic)
grpc(grpcio)[^1]
http/protobuf
http/json 阻塞

TLS

依赖项 std 提供CA 客户端密钥
tonic 未测试 未测试 未测试
grpcio 未测试 未测试 未测试
reqwest 未测试 未测试 未测试

示例

  • 对于 grpc,我们可以简单地使用 install_simple。它使用 future_executors
use opentelemetry_api::{trace::Tracer, global, KeyValue};
use opentelemetry_sdk::Resource;

#[tokio::main]
pub async fn main() {
    let tracer = match otlp_exporter::new_pipeline()
        .trace()
        .with_env()
        .with_tracer_config(
            opentelemetry_sdk::trace::config().with_resource(Resource::new(vec![KeyValue::new(
                opentelemetry_semantic_conventions::resource::SERVICE_NAME,
                "otlp-exporter-example",
            )])),
        )
        .install_simple()
    {
        Ok(tracer) => tracer,
        Err(e) => {
            println!("error: {e}");
            return;
        }
    };

    tracer.in_span("otlp-exporter trace example", |_cx| {});

    global::shutdown_tracer_provider();
}
  • 对于 http/protocolhttp/json,它依赖于 reqwest,而 reqwest 依赖于 tokio。因此,我们必须使用带有 Tokioinstall_batch
use opentelemetry_api::{trace::Tracer, global, KeyValue};
use opentelemetry_sdk::{runtime::Tokio, Resource};

#[tokio::main]
pub async fn main() {
    let tracer = match otlp_exporter::new_pipeline()
        .trace()
        .with_env()
        .with_tracer_config(
            opentelemetry_sdk::trace::config().with_resource(Resource::new(vec![KeyValue::new(
                opentelemetry_semantic_conventions::resource::SERVICE_NAME,
                "otlp-exporter-example",
            )])),
        )
        .install_batch(Tokio)
    {
        Ok(tracer) => tracer,
        Err(e) => {
            println!("error: {e}");
            return;
        }
    };

    tracer.in_span("otlp-exporter trace example", |_cx| {});

    global::shutdown_tracer_provider();
}

[^1]: 截至2023-08-16,grpc 0.12.1 无法与 gcc 13 编译,您可以使用其 git 仓库进行修补。

依赖项

~7–29MB
~485K SLoC