tracing-opentelemetry-setup 0.7.7

Utilities to provide proper setup of tracing with OTEL export
Documentation

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.

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")