Skip to main content
OpenTelemetry Rust is distributed as a collection of crates. Install the crates you need based on which telemetry signals (traces, metrics, logs) and exporters you want to use.

Prerequisites

Minimum Rust version: 1.75 or later
Verify your Rust version:
rustc --version
If you need to update Rust:
rustup update stable

Basic installation

Add the core OpenTelemetry dependencies to your Cargo.toml:
[dependencies]
opentelemetry = "0.31.0"
opentelemetry_sdk = "0.31.0"
By default, opentelemetry and opentelemetry_sdk include all signals (trace, metrics, logs). Use feature flags to reduce compile times and binary size if you only need specific signals.

Choose an exporter

Select an exporter based on your observability backend: The OTLP exporter supports HTTP and gRPC protocols for sending telemetry to the OpenTelemetry Collector or OTLP-compatible backends:
[dependencies]
opentelemetry = "0.31.0"
opentelemetry_sdk = "0.31.0"
opentelemetry-otlp = { version = "0.31.0", features = ["http-proto", "reqwest-blocking-client"] }

Stdout (for development and debugging)

Export telemetry to stdout for local development:
Cargo.toml
[dependencies]
opentelemetry = "0.31.0"
opentelemetry_sdk = "0.31.0"
opentelemetry-stdout = "0.31.0"
tokio = { version = "1.0", features = ["full"] }

Prometheus

Export metrics to Prometheus:
Cargo.toml
[dependencies]
opentelemetry = { version = "0.31.0", features = ["metrics"] }
opentelemetry_sdk = { version = "0.31.0", features = ["metrics"] }
opentelemetry-prometheus = "0.31.0"
prometheus = "0.13"

Zipkin

Export traces to Zipkin:
Cargo.toml
[dependencies]
opentelemetry = { version = "0.31.0", features = ["trace"] }
opentelemetry_sdk = { version = "0.31.0", features = ["trace"] }
opentelemetry-zipkin = "0.31.0"

Log appenders

OpenTelemetry Rust does not provide a new logging API. Use an appender to bridge existing logging libraries to OpenTelemetry.
Add a log appender to route logs to OpenTelemetry:
[dependencies]
opentelemetry = { version = "0.31.0", features = ["logs"] }
opentelemetry_sdk = { version = "0.31.0", features = ["logs"] }
opentelemetry-appender-tracing = "0.31.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["registry", "std"] }
If you’re starting a new project, use the tracing crate. It supports structured logging and is actively maintained. OpenTelemetry itself uses tracing for internal logging.

Common dependency combinations

Here are complete examples for common use cases:

Full stack with OTLP (HTTP)

Cargo.toml
[dependencies]
opentelemetry = "0.31.0"
opentelemetry_sdk = "0.31.0"
opentelemetry-otlp = { version = "0.31.0", features = ["http-proto", "reqwest-blocking-client"] }
opentelemetry-appender-tracing = "0.31.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["registry", "std"] }
tokio = { version = "1.0", features = ["full"] }

Development with stdout

Cargo.toml
[dependencies]
opentelemetry = "0.31.0"
opentelemetry_sdk = "0.31.0"
opentelemetry-stdout = "0.31.0"
opentelemetry-appender-tracing = "0.31.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["registry", "std"] }
tokio = { version = "1.0", features = ["full"] }
once_cell = "1.0"

Metrics only with Prometheus

Cargo.toml
[dependencies]
opentelemetry = { version = "0.31.0", features = ["metrics"] }
opentelemetry_sdk = { version = "0.31.0", features = ["metrics"] }
opentelemetry-prometheus = "0.31.0"
prometheus = "0.13"
tokio = { version = "1.0", features = ["full"] }

Optional features

Configure additional features as needed:

Compression (OTLP)

Enable compression for OTLP exports:
Cargo.toml
[dependencies]
opentelemetry-otlp = { version = "0.31.0", features = ["http-proto", "gzip-http"] }
Available compression features:
  • gzip-http - gzip compression for HTTP
  • zstd-http - zstd compression for HTTP
  • gzip-tonic - gzip compression for gRPC
  • zstd-tonic - zstd compression for gRPC

TLS support (gRPC)

Enable TLS for gRPC connections:
Cargo.toml
[dependencies]
opentelemetry-otlp = { version = "0.31.0", features = ["grpc-tonic", "tls-ring"] }
Available TLS features:
  • tls-ring - TLS using ring crypto
  • tls-aws-lc - TLS using AWS libcrypto
  • tls-roots - Use native certificate roots
  • tls-webpki-roots - Use webpki certificate roots

Retry support

Enable automatic retry for failed exports:
[dependencies]
opentelemetry-otlp = { version = "0.31.0", features = ["http-proto", "experimental-http-retry"] }
opentelemetry_sdk = { version = "0.31.0", features = ["rt-tokio"] }
tokio = { version = "1.0", features = ["full"] }

Verify installation

Build your project to verify all dependencies are installed correctly:
cargo build
If you encounter any dependency resolution issues, try updating your dependencies:
cargo update

Next steps

Quickstart

Try a complete working example with traces, metrics, or logs

Build docs developers (and LLMs) love