1 unstable release
0.13.0-beta.1 | Jun 19, 2023 |
---|
#113 in #open-telemetry
1.5MB
25K
SLoC
OpenTelemetry Collector Rust Exporter
OTLP
integration for applications instrumented with OpenTelemetry
.
Overview
OpenTelemetry
is a collection of tools, APIs, and SDKs used to instrument,
generate, collect, and export telemetry data (metrics, logs, and traces) for
analysis in order to understand your software's performance and behavior.
This crate provides an exporter for sending trace and metric data in the OTLP format to the OpenTelemetry collector. The OpenTelemetry Collector offers a vendor-agnostic implementation on how to receive, process, and export telemetry data. In addition, it removes the need to run, operate, and maintain multiple agents/collectors in order to support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.) sending to multiple open-source or commercial back-ends.
Quickstart
First make sure you have a running version of the opentelemetry collector you want to send data to:
$ docker run -p 4317:4317 otel/opentelemetry-collector-dev:latest
Then install a new pipeline with the recommended defaults to start exporting telemetry:
use opentelemetry::trace::Tracer;
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
// use tonic as grpc layer here.
// If you want to use grpcio. enable `grpc-sys` feature and use with_grpcio function here.
let tracer = opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
.install_simple()?;
tracer.in_span("doing_work", |cx| {
// Traced app logic here...
});
Ok(())
}
Performance
For optimal performance, a batch exporter is recommended as the simple exporter
will export each span synchronously on drop. You can enable the rt-tokio
,
rt-tokio-current-thread
or rt-async-std
features and specify a runtime
on the pipeline builder to have a batch exporter configured for you
automatically.
[dependencies]
opentelemetry = { version = "*", features = ["async-std"] }
opentelemetry-otlp = { version = "*", features = ["grpc-sys"] }
let tracer = opentelemetry_otlp::new_pipeline()
.install_batch(opentelemetry::runtime::AsyncStd)?;
Kitchen Sink Full Configuration
Example showing how to override all configuration options.
Generally there are two parts of configuration. One is metrics config
or tracing config. Users can config it via OtlpTracePipeline
or OtlpMetricPipeline
. The other is exporting configuration.
Users can set those configurations using OtlpExporterPipeline
based
on the choice of exporters.
Grpc libraries comparison
Multiple gRPC transport layers are available. tonic
is the default gRPC transport
layer and is enabled by default. grpcio
is optional.
gRPC transport layer | hyperium/tonic | tikv/grpc-rs |
---|---|---|
Feature | --features=default | --features=grpc-sys |
gRPC library | tonic |
grpcio |
Transport | hyperium/hyper (Rust) | grpc/grpc (C++ binding) |
TLS support | yes | yes |
TLS library | rustls | OpenSSL |
TLS optional | yes | yes |
Supported .proto generator | prost |
prost , protobuf |
Dependencies
~6–27MB
~437K SLoC