tracing_opentelemetry_setup/lib.rs
1//!OpenTelemetry integration for tracing.
2//!
3//!The goal of this crate is to provide all-in-one crate to initialize OpenTelemetry integration with tracing
4//!
5//!MSRV 1.85
6//!
7//!## Features
8//!
9//! - `panic` - Provides panic hook implementation. Must be enabled via panic module
10//!- `propagation` - Enables propagation utilities
11//!- `metrics` - Enable integration with [metrics](https://crates.io/crates/metrics)
12//!- `tracing-metrics` - Enable metrics usage via [tracing-opentelemetry](https://docs.rs/tracing-opentelemetry/latest/tracing_opentelemetry/struct.MetricsLayer.html)
13//!- `rt-tokio` - Tell OpenTelemetry sdk that you use tokio runtime
14//!
15//!### Non-standard exporters
16//!
17//!- `datadog` - Enables datadog agent exporter. Currently supports only traces & logs
18//!
19//!### Grpc features
20//!
21//!- `grpc` - Enables tonic based gRPC transport
22//!- `grpc-compression` - Enables tonic based gRPC transport with compression
23//!- `grpc-tls` - Enables tonic based gRPC transport with TLS
24//!
25//!### HTTP features
26//!
27//!Note that when enabling multiple clients, only one client will be used by default and it is up to [opentelemetry-otlp](https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp)
28//!
29//!- `http` - Enables http exporter code without specific client as default option.
30//!- `http-compression` - Enables http transport with compression
31//!- `http-tls` - Enables http transport with TLS
32//!
33//!- `http-reqwest-blocking` - Enables blocking reqwest client.
34//!- `http-reqwest` - Enables async reqwest client.
35//!- `http-hyper` - Enables hyper client.
36//!
37//!## Usage
38//!
39//!Make sure `tracing-opentelemetry-setup` is installed to your dependencies
40//!
41//!```rust
42//! use tracing_opentelemetry_setup::{Otlp, tracing_subscriber, tracing};
43//! use tracing_opentelemetry_setup::builder::{Destination, Protocol, Attributes, TraceSettings};
44//!
45//! use tracing_subscriber::layer::SubscriberExt;
46//! use tracing_subscriber::util::SubscriberInitExt;
47//!
48//! let default_attrs = Attributes::builder().with_attr("service.name", "サービス").finish();
49//! let trace_settings = TraceSettings::new(1.0);
50//! let destination = Destination {
51//! protocol: Protocol::HttpBinary,
52//! url: "http://localhost:45081".into()
53//! };
54//! let mut otlp = Otlp::builder(destination).with_header("Authorization", "Basic <my token>").with_trace(Some(&default_attrs), trace_settings).finish();
55//! let registry = tracing_subscriber::registry().with(otlp.create_layer("tracing-opentelemetry".into())) //aggregates sdk providers into single layer
56//! .with(tracing_subscriber::filter::LevelFilter::from_level(tracing::Level::INFO));
57//!
58//! let _guard = registry.set_default();
59//! //Do your job then shutdown to make sure you flush everything
60//! otlp.shutdown(None).expect("successfully shut down OTLP")
61//!```
62
63#![warn(missing_docs)]
64#![allow(clippy::style)]
65
66#[cfg(feature = "datadog")]
67mod datadog;
68#[cfg(feature = "panic")]
69pub mod panic;
70#[cfg(feature = "propagation")]
71pub mod propagation;
72#[cfg(feature = "metrics")]
73pub use metrics_opentelemetry::metrics;
74pub use tracing;
75pub use tracing_subscriber;
76pub use opentelemetry;
77pub use opentelemetry_sdk;
78pub mod layer;
79pub mod builder;
80pub use builder::Otlp;