Crate reqwest_tracing

Source
Expand description

Opentracing middleware implementation for reqwest_middleware.

Attach TracingMiddleware to your client to automatically trace HTTP requests.

The simplest possible usage:

use reqwest_middleware::{ClientBuilder};
use reqwest_tracing::TracingMiddleware;

let reqwest_client = reqwest::Client::builder().build().unwrap();
let client = ClientBuilder::new(reqwest_client)
   // Insert the tracing middleware
   .with(TracingMiddleware::default())
   .build();

let resp = client.get("https://truelayer.com").send().await.unwrap();

To customise the span names use OtelName.

use reqwest_middleware::{ClientBuilder, Extension};
use reqwest_tracing::{
    TracingMiddleware, OtelName
};
let reqwest_client = reqwest::Client::builder().build().unwrap();
let client = ClientBuilder::new(reqwest_client)
   // Inserts the extension before the request is started
   .with_init(Extension(OtelName("my-client".into())))
   // Makes use of that extension to specify the otel name
   .with(TracingMiddleware::default())
   .build();

let resp = client.get("https://truelayer.com").send().await.unwrap();

// Or specify it on the individual request (will take priority)
let resp = client.post("https://api.truelayer.com/payment")
    .with_extension(OtelName("POST /payment".into()))
   .send()
   .await
   .unwrap();

In this example we define a custom span builder to calculate the request time elapsed and we register the TracingMiddleware.

Note that Opentelemetry tracks start and stop already, there is no need to have a custom builder like this.

use reqwest_middleware::Result;
use http::Extensions;
use reqwest::{Request, Response};
use reqwest_middleware::ClientBuilder;
use reqwest_tracing::{
    default_on_request_end, reqwest_otel_span, ReqwestOtelSpanBackend, TracingMiddleware
};
use tracing::Span;
use std::time::{Duration, Instant};

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);
    }
}

let http = ClientBuilder::new(reqwest::Client::new())
    .with(TracingMiddleware::<TimeTrace>::new())
    .build();

Macros§

reqwest_otel_span
reqwest_otel_span! creates a new tracing::Span. It empowers you to add custom properties to the span on top of the default properties provided by the macro

Structs§

DefaultSpanBackend
The default ReqwestOtelSpanBackend for TracingMiddleware. Note that it doesn’t include the url.full field in spans, you can use SpanBackendWithUrl to add it.
DisableOtelPropagation
DisableOtelPropagation disables opentelemetry header propagation, while still tracing the HTTP request.
OtelName
OtelName allows customisation of the name of the spans created by DefaultSpanBackend and SpanBackendWithUrl.
OtelPathNames
OtelPathNames allows including templated paths in the spans created by DefaultSpanBackend and SpanBackendWithUrl.
SpanBackendWithUrl
Similar to DefaultSpanBackend but also adds the url.full attribute to request spans.
TracingMiddleware
Middleware for tracing requests using the current Opentelemetry Context.

Constants§

ERROR_CAUSE_CHAIN
The error.cause_chain field added to the span by reqwest_otel_span
ERROR_MESSAGE
The error.message field added to the span by reqwest_otel_span
HTTP_REQUEST_METHOD
The http.request.method field added to the span by reqwest_otel_span
HTTP_RESPONSE_STATUS_CODE
The http.response.status_code field added to the span by reqwest_otel_span
OTEL_KIND
The otel.kind field added to the span by reqwest_otel_span
OTEL_NAME
The otel.name field added to the span by reqwest_otel_span
OTEL_STATUS_CODE
The otel.status_code field added to the span by reqwest_otel_span
SERVER_ADDRESS
The server.address field added to the span by reqwest_otel_span
SERVER_PORT
The server.port field added to the span by reqwest_otel_span
URL_FULL
The url.full field added to the span by reqwest_otel_span
URL_SCHEME
The url.scheme field added to the span by reqwest_otel_span
USER_AGENT_ORIGINAL
The user_agent.original field added to the span by reqwest_otel_span

Traits§

ReqwestOtelSpanBackend
ReqwestOtelSpanBackend allows you to customise the span attached by TracingMiddleware to incoming requests.

Functions§

default_on_request_end
Populates default success/failure fields for a given reqwest_otel_span! span.
default_on_request_failure
Populates default failure fields for a given reqwest_otel_span! span.
default_on_request_success
Populates default success fields for a given reqwest_otel_span! span.
default_span_name
Determine the name of the span that should be associated with this request.