#open-telemetry #tracing

tracing-opentelemetry-setup

Utilities to provide proper setup of tracing with OTEL export

26 releases (6 breaking)

Uses new Rust 2024

new 0.7.14 Apr 8, 2026
0.7.13 Mar 19, 2026
0.7.6 Feb 18, 2026

#223 in Debugging

Download history 8/week @ 2026-03-18 68/week @ 2026-03-25 37/week @ 2026-04-01

113 downloads per month

BSL-1.0 license

92KB
1.5K SLoC

tracing-opentelemetry-setup

Rust Crates.io Documentation dependency status

OpenTelemetry integration for tracing.

The goal of this crate is to provide all-in-one crate to initialize OpenTelemetry integration with tracing

MSRV 1.85

Features

  • panic - Provides panic hook implementation. Must be enabled via panic module
  • propagation - Enables propagation utilities
  • metrics - Enable integration with metrics
  • tracing-metrics - Enable metrics usage via tracing-opentelemetry
  • rt-tokio - Tell OpenTelemetry sdk that you use tokio runtime
  • tracing-log - Enables tracing-log feature across all tracing ecosystem used by this crate.
  • internal-logs - Enables internal-logs feature across opentelemetry crates.

Non-standard exporters

  • datadog - Enables datadog agent exporter. Currently supports only traces & logs

Grpc features

  • grpc - Enables tonic based gRPC transport
  • grpc-compression - Enables tonic based gRPC transport with compression
  • grpc-tls - Enables tonic based gRPC transport with TLS

HTTP features

Note that when enabling multiple clients, only one client will be used by default and it is up to opentelemetry-otlp

  • http - Enables http exporter code without specific client as default option.

  • http-compression - Enables http transport with compression

  • http-tls - Enables http transport with TLS

  • http-reqwest-blocking - Enables blocking reqwest client.

  • http-reqwest - Enables async reqwest client.

  • http-hyper - Enables hyper client.

  • http-ureq - Enables option of using basic ureq http client (no dependency on async IO)

  • http-ureq-tls - Enables TLS support in ureq using rustls with platform verifier.

Usage

Make sure tracing-opentelemetry-setup is installed to your dependencies

use tracing_opentelemetry_setup::{Otlp, tracing_subscriber, tracing};
use tracing_opentelemetry_setup::builder::{Destination, Protocol, Attributes, TraceSettings};

use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;

let default_attrs = Attributes::builder().with_attr("service.name", "サービス").finish();
let trace_settings = TraceSettings::new("tracing-opentelemetry".into(), 1.0);
let destination = Destination {
    protocol: Protocol::HttpBinary,
    url: "http://localhost:45081".into(),
    attributes: Some(&default_attrs),
};

//Create common OTLP settings
let mut otlp = Otlp::builder().with_header("Authorization", "Basic <my token>");
//Initialize subscriber
let registry = tracing_subscriber::registry().with(otlp.with_trace(&destination, trace_settings)) //initializes tracing and return layer
                                             .with(otlp.with_logs(&destination)) //initializes logging and returns layer
                                             .with(tracing_subscriber::filter::LevelFilter::from_level(tracing::Level::INFO));
//Finalizes OTLP returning guard
let mut otlp = otlp.finish();

let _guard = registry.set_default();
//Do your job then shutdown to make sure you flush everything
otlp.shutdown(None).expect("successfully shut down OTLP")

Dependencies

~9–29MB
~295K SLoC