#http-request #propagation #tracing #fastrace #traceparent #http-client

fastrace-reqwest

A reqwest util for propagating trace context for fastrace

1 unstable release

new 0.1.0 Mar 18, 2025

#838 in Debugging

Apache-2.0

24KB

fastrace-reqwest

Crates.io Documentation MSRV 1.83.0 CI Status License

Distributed tracing integration for reqwest HTTP client requests with fastrace.

Overview

fastrace-reqwest provides automatic trace context propagation for HTTP requests made with the reqwest client. It works seamlessly with the fastrace library to extract and inject trace context into outgoing requests.

What is Context Propagation?

Distributed tracing works by passing trace context (trace IDs, span IDs, etc.) between services. This allows individual service traces to be connected into a complete picture of a request's journey through your system.

Context propagation refers to the act of passing this trace context between services. In HTTP-based systems, this is typically done via HTTP headers like traceparent following the W3C Trace Context specification.

Features

  • 🔄 Automatic Context Propagation: Automatically inject trace context into outgoing HTTP requests.
  • 🌉 Seamless Integration: Works seamlessly with the fastrace library for complete distributed tracing.
  • 📊 Full Compatibility: Works with fastrace's collection and reporting capabilities.

Installation

Add to your Cargo.toml:

[dependencies]
fastrace = "0.7"
fastrace-reqwest = "0.1"

Usage

HTTP Client

use fastrace::prelude::*;
use fastrace_reqwest::traceparent_headers;
use reqwest::Client;

#[fastrace::trace]
async fn send_request() {
    let client = Client::new();
    
    // Add trace context headers to your request.
    let response = client
        .get("https://api.example.com/data")
        .headers(traceparent_headers())
        .send()
        .await
        .unwrap();
        
    // Process response...
}

How It Works

fastrace-reqwest enables automatic propagation of trace context between services by:

  1. Extracting the current trace context from the calling function.
  2. Formatting it according to the W3C Trace Context specification.
  3. Injecting it into outgoing HTTP requests as headers
  4. Working seamlessly with the companion fastrace-poem library (or other compatible frameworks) to extract the context on the receiving end.

Complete Example

Check out the examples directory for complete working examples showing:

  • client.rs - How to send requests with trace context
  • server.rs - How to receive and process trace context using fastrace-poem

To run the examples:

# First start the server
cargo run --example server

# Then in another terminal, run the client
cargo run --example client

How It Works

  1. When making an HTTP request, traceparent_headers() checks for a current span context.
  2. If found, it encodes the context as a traceparent HTTP header following the W3C standard.
  3. The receiving service extracts this header and continues the trace.

License

This project is licensed under the Apache-2.0 license.

Dependencies

~6–17MB
~221K SLoC