opentelemetry-tide

[OpenTelemetry][otel] integration for [Tide][tide]

Crates.io version Download docs.rs docs

Notes

How to use

```sh

Run jaeger in background

docker run -d -p6831:6831/udp -p6832:6832/udp -p16686:16686 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/ ```

Code example

Cargo.toml

toml [dependencies] async-std = {version = "1.6", features = ["attributes"]} opentelemetry = "0.7" opentelemetry-jaeger = "0.6" opentelemetry-tide = "0.3" thrift = "0.13" tide = "0.13"

server.rs

```rust use opentelemetry::{api::KeyValue, global, sdk}; use opentelemetry_tide::OpenTelemetryTracingMiddleware; use tide::Request;

[async_std::main]

async fn main() -> thrift::Result<()> { tide::log::start(); // Make sure to initialize the tracer init_tracer()?;

let mut app = tide::new();
// Here we add the middleware
app.with(OpenTelemetryTracingMiddleware::new());
app.at("/").get(|req: Request<()>| async move {
    eprintln!("req.version = {:?}", req.version());
    Ok("Hello, OpenTelemetry!")
});
app.listen("127.0.0.1:3000").await?;

Ok(())

}

fn inittracer() -> thrift::Result<()> { let exporter = opentelemetryjaeger::Exporter::builder() .withagentendpoint("127.0.0.1:6831".parse().expect("not a valid endpoint")) .withprocess(opentelemetryjaeger::Process { service_name: "example-server".into(), tags: vec![KeyValue::new("exporter", "jaeger")], }) .init()?;

let provider = sdk::Provider::builder()
    .with_simple_exporter(exporter)
    .with_config(sdk::Config {
        default_sampler: Box::new(sdk::Sampler::AlwaysOn),
        ..Default::default()
    })
    .build();
global::set_provider(provider);

Ok(())

} ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.