Crate opentelemetry_surf[−][src]
Add OpenTelemetry tracing support to your Surf clients. Be part of the new observability movement!
Notes
- It is heavily inspired by opentelemetry-tide crate; surf and tide share very similar middleware structure. Thank you, dear @http-rs folks! 🙇🏻♂️
- It only implements very basic request tracing on the middleware layer. If something is missing, please open an issue and describe your desired feature or create a PR with a change.
- It can record http request/response life cycle events when used with isahc and its metrics feature enabled.
- You probably do not want to use it in production. 🤷
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 simple client example with tracing middleware
cargo run --example simple
# Run metrics client example (uses isahc with metrics enabled)
cargo run --example metrics --features isahc-metrics
# Open browser and view the traces
firefox http://localhost:16686/
Code example
Cargo.toml
async-std = { version = "1.9", features = ["attributes"] }
opentelemetry = { version = "0.14", features = ["async-std", "rt-async-std"] }
opentelemetry-jaeger = { version = "0.13", features = ["async-std"] }
opentelemetry-surf = "0.3"
client.rs
#[async_std::main] async fn main() -> surf::Result<()> { let tracer = opentelemetry_jaeger::new_pipeline().install_batch(opentelemetry::runtime::AsyncStd)?; let otel_mw = opentelemetry_surf::OpenTelemetryTracingMiddleware::new(tracer); let client = surf::client().with(otel_mw); let res = client.get("https://httpbin.org/get").await?; dbg!(res); opentelemetry::global::shutdown_tracer_provider(); Ok(()) }
Cargo Features
flag | description |
---|---|
isahc-metrics | enables more details when using a custom ishac client configuration, see examples/client/metrics.rs for details |
Safety
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% Safe Rust.
Structs
OpenTelemetryTracingMiddleware | The middleware struct to be used in tide |