Crate opentelemetry_tide[−][src]
Add OpenTelemetry tracing and metrics support to your tide application. Be part of the new observability movement!
How to use
# Run jaeger in background
docker run -d \
-p6831:6831/udp -p6832:6832/udp -p16686:16686 -p14268:14268 \
jaegertracing/all-in-one:latest
# Run server example with tracing middleware
cargo run --example server
# Make a request or two ...
curl http://localhost:3000/
# Open browser and view the traces
firefox http://localhost:16686/
# Check the prometheus metrics endpoint
curl http://localhost:3000/metrics
Example
Cargo.toml
# ...
[dependencies]
async-std = { version = "1.9", features = ["attributes"] }
opentelemetry = { version = "0.13", features = ["async-std", "rt-async-std"] }
opentelemetry-jaeger = { version = "0.12", features = ["async-std"] }
opentelemetry-tide = "0.7"
tide = "0.16"
server.rs
use opentelemetry::{global, KeyValue, runtime}; use opentelemetry_semantic_conventions::resource; use opentelemetry_tide::TideExt; const VERSION: &'static str = env!("CARGO_PKG_VERSION"); #[async_std::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { tide::log::with_level(tide::log::LevelFilter::Warn); let tags = [resource::SERVICE_VERSION.string(VERSION)]; let tracer = opentelemetry_jaeger::new_pipeline() .with_service_name("example-server") .with_tags(tags.iter().map(ToOwned::to_owned)) .install_batch(runtime::AsyncStd) .expect("pipeline install failure"); let metrics_kvs = vec![KeyValue::new("K", "V")]; let mut app = tide::new(); app.with_middlewares(tracer, Some(metrics_kvs)); app.at("/").get(|_| async move { Ok("Hello, OpenTelemetry!") }); app.listen("0.0.0.0:3000").await?; global::shutdown_tracer_provider(); Ok(()) }
Cargo Features
flag | description |
---|---|
trace | enables tracing middleware; enabled by default via full |
metrics | enables metrics middleware; enabled by default via full |
full | includes both trace and metrics features, enabled by default |
Safety
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% Safe Rust.
Structs
OpenTelemetryMetricsMiddleware | The middleware struct to be used in tide |
OpenTelemetryTracingMiddleware | The middleware struct to be used in tide |
Traits
TideExt | this extension trait provides convenience methods for attaching middlewares of this crate |