1 个不稳定版本
0.4.6 | 2023 年 12 月 6 日 |
---|
#532 在 HTTP 客户端
76KB
944 代码行
reqwest-tracing
reqwest-middleware 的 Opentracing 中间件实现。
概览
将 TracingMiddleware
添加到您的客户端以自动跟踪 HTTP 请求
# Cargo.toml
# ...
[dependencies]
opentelemetry = "0.18"
reqwest = "0.11"
reqwest-middleware = "0.1.1"
reqwest-retry = "0.1.1"
reqwest-tracing = { version = "0.3.1", features = ["opentelemetry_0_18"] }
tokio = { version = "1.12.0", features = ["macros", "rt-multi-thread"] }
tracing = "0.1"
tracing-opentelemetry = "0.18"
tracing-subscriber = "0.3"
task-local-extensions = "0.1.4"
use reqwest_tracing::{default_on_request_end, reqwest_otel_span, ReqwestOtelSpanBackend, TracingMiddleware};
use opentelemetry::sdk::export::trace::stdout;
use reqwest::{Request, Response};
use reqwest_middleware::{ClientBuilder, Result};
use std::time::Instant;
use task_local_extensions::Extensions;
use tracing::Span;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::Registry;
pub struct TimeTrace;
impl ReqwestOtelSpanBackend for TimeTrace {
fn on_request_start(req: &Request, extension: &mut Extensions) -> Span {
extension.insert(Instant::now());
reqwest_otel_span!(name="example-request", req, time_elapsed = tracing::field::Empty)
}
fn on_request_end(span: &Span, outcome: &Result<Response>, extension: &mut Extensions) {
let time_elapsed = extension.get::<Instant>().unwrap().elapsed().as_millis() as i64;
default_on_request_end(span, outcome);
span.record("time_elapsed", &time_elapsed);
}
}
#[tokio::main]
async fn main() {
let tracer = stdout::new_pipeline().install_simple();
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
let subscriber = Registry::default().with(telemetry);
tracing::subscriber::set_global_default(subscriber).unwrap();
run().await;
}
async fn run() {
let client = ClientBuilder::new(reqwest::Client::new())
.with(TracingMiddleware::<TimeTrace>::new())
.build();
client.get("https://truelayer.com").send().await.unwrap();
}
$ cargo run
SpanData { span_context: SpanContext { trace_id: ...
有关如何设置跟踪订阅者以使用 spans 的更多信息,请参阅 tracing
库。
如何安装
将 reqwest-tracing
添加到依赖项中。可选地通过启用 opentelemetry 版本功能启用 opentelemetry 集成
[dependencies]
# ...
reqwest-tracing = { version = "0.3.1", features = ["opentelemetry_0_18"] }
可用的 opentelemetry 功能有 opentelemetry_0_20
,opentelemetry_0_19
,opentelemetry_0_18
,opentelemetry_0_17
,opentelemetry_0_16
,opentelemetry_0_15
,opentelemetry_0_14
和 opentelemetry_0_13
。
许可
根据您的选择,在 Apache License,Version 2.0 或 MIT 许可证下许可。除非您明确声明,否则您有意提交给作品以供包含在内的任何贡献,根据 Apache-2.0 许可证定义,应按照上述双重许可,而无需任何额外的条款或条件。
依赖项
~4–19MB
~258K SLoC