opentelemetry-configuration
Opinionated OpenTelemetry SDK configuration for Rust applications.
This crate wires together the OpenTelemetry SDK, OTLP exporters, and the tracing crate ecosystem into a cohesive configuration system. It handles initialisation, flushing, and shutdown of all signal providers (traces, metrics, logs).
Features
- Layered configuration - Combine defaults, config files, environment variables, and programmatic overrides using figment
- Sensible defaults - Protocol-specific endpoints (localhost:4318 for HTTP, localhost:4317 for gRPC)
- Drop-based lifecycle - Automatic flush and shutdown when guard goes out of scope
- Tracing integration - Automatic setup of
tracing-opentelemetryandopentelemetry-appender-tracinglayers
Quick Start
use ;
Configuration
Programmatic
use ;
let _guard = new
.endpoint
.protocol
.service_name
.service_version
.deployment_environment
.build?;
From Environment Variables
use OtelSdkBuilder;
let _guard = new
.with_standard_env // Reads OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, etc.
.build?;
From Config File
use OtelSdkBuilder;
let _guard = new
.with_file
.build?;
TOML Configuration Format
[]
= "http://collector:4318"
= "httpbinary" # or "grpc", "httpjson"
= "10s"
[]
= "Bearer token"
[]
= "my-service"
= "1.0.0"
= "production"
[]
= true
[]
= 2048
= 512
= "5s"
[]
= true
[]
= true
Batch Configuration
The batch processor settings control how telemetry data is batched before export:
| Setting | Default | Description |
|---|---|---|
max_queue_size |
2048 | Maximum spans/logs buffered before dropping |
max_export_batch_size |
512 | Maximum items per export batch |
scheduled_delay |
5s | Interval between export attempts |
Protocol Support
| Protocol | Default Port | Content-Type |
|---|---|---|
HttpBinary (default) |
4318 | application/x-protobuf |
HttpJson |
4318 | application/json |
Grpc |
4317 | gRPC |
Lifecycle Management
The OtelGuard returned by build() manages the lifecycle of all providers:
let guard = new
.service_name
.build?;
// Manual flush if needed
guard.flush;
// Explicit shutdown (consumes guard)
guard.shutdown?;
// Or let drop handle it automatically
Disabling Signals
let _guard = new
.service_name
.disable_traces
.disable_metrics
.disable_logs
.build?;
Custom Resource Attributes
let _guard = new
.service_name
.resource_attribute
.resource_attribute
.build?;
Licence
MIT