Crates.io | opentelemetry-tide |
lib.rs | opentelemetry-tide |
version | 0.12.0 |
source | src |
created_at | 2020-07-31 23:58:01.913783 |
updated_at | 2022-02-15 17:19:31.06073 |
description | OpenTelemetry integration for Tide |
homepage | https://github.com/asaaki/opentelemetry-tide |
repository | https://github.com/asaaki/opentelemetry-tide |
max_upload_size | |
id | 271770 |
size | 116,706 |
OpenTelemetry integration for Tide
Add OpenTelemetry tracing and metrics support to your tide application. Be part of the new observability movement!
# 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
Cargo.toml
# ...
[dependencies]
async-std = { version = "1.10", features = ["attributes"] }
opentelemetry = { version = "0.17.0", features = ["rt-async-std"] }
opentelemetry-jaeger = { version = "0.16.0", features = ["rt-async-std"] }
opentelemetry-tide = "0.12"
tide = "0.16"
server.rs
use opentelemetry::{global, KeyValue, runtime};
use opentelemetry_semantic_conventions::resource;
use opentelemetry_tide::TideExt; // import trait
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_tags(tags.iter().map(ToOwned::to_owned))
.install_batch(runtime::AsyncStd)
.expect("pipeline install failure");
let tracer = global::tracer("example-server");
let metrics_kvs = vec![KeyValue::new("K", "V")];
let mut app = tide::new();
// use the trait
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(())
}
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 |
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% Safe Rust.