opentelemetry-surf 0.1.1

OpenTelemetry integration for surf
Documentation

OpenTelemetry integration for Surf

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, create a PR or open an issue and describe your desired feature.
  • (soon) It records http request/response life cycle events when used with isahc and its metrics enabled. (needs a change in http-client crate)
  • 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/

example jaeger trace

Code example

Cargo.toml

async-std = { version = "1.7", features = ["attributes"] }
opentelemetry = { version = "0.10", features = ["async-std"] }
opentelemetry-jaeger = { version = "0.9", features = ["async-std"] }
opentelemetry-surf = "0.1" # not yet released
opentelemetry-surf = { git = "https://github.com/asaaki/opentelemetry-surf", branch = "main" }

client.rs

#[async_std::main]
async fn main() -> surf::Result<()> {
    let (tracer, _uninstall) = opentelemetry_jaeger::new_pipeline().install().unwrap();
    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);
    Ok(())
}

Cargo Features:

Safety

This crate uses #![forbid(unsafe_code)] to ensure everything is implemented in 100% Safe Rust.

License