#exporter #open-telemetry #otlp

otlp-exporter

OTLP Exporter for the OpenTelemetry Collector

1 unstable release

0.1.0 Aug 16, 2023

#690 in Debugging

Custom license

72KB
1.5K SLoC

THIS IS A PERSONAL PROJECT. IT IS STILL IN DEVELOPMENT. USE ON YOUR OWN RISK.

An exporter exports trace, metric and log data in the OTLP format.

Support Matrix

Protocol

protocol trace metric log
grpc(tonic)
grpc(grpcio)[^1]
http/protobuf
http/json blocking

TLS

dep std provided ca client key
tonic not test not test not test
grpcio not test not test not test
reqwest not test not test not test

Examples

  • For grpc, we can use install_simple simply. It uses 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();
}
  • For http/protocol and http/json, it depends on reqwest which depends on tokio. So, we must use install_batch with Tokio.
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]: As of 2023-08-16, grpc 0.12.1 can't be compiled with gcc 13, you can patch it with its git repo.

Dependencies

~8–29MB
~496K SLoC