Crate tracing_opentelemetry_setup

Crate tracing_opentelemetry_setup 

Source
Expand description

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

§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.

§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(1.0);
 let destination = Destination {
     protocol: Protocol::HttpBinary,
     url: "http://localhost:45081".into()
 };
 let mut otlp = Otlp::builder(destination).with_header("Authorization", "Basic <my token>").with_trace(Some(&default_attrs), trace_settings).finish();
 let registry = tracing_subscriber::registry().with(otlp.create_layer("tracing-opentelemetry".into())) //aggregates sdk providers into single layer
                                              .with(tracing_subscriber::filter::LevelFilter::from_level(tracing::Level::INFO));

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

Re-exports§

pub use builder::Otlp;
pub use metrics_opentelemetry::metrics;
pub use tracing;
pub use tracing_subscriber;
pub use opentelemetry;
pub use opentelemetry_sdk;

Modules§

builder
Opentelemetry setup module
layer
tracing subscriber layer
panic
Panic hook module
propagation
Opentelemtry propagation support