extracting traceparent from header to span
This commit is contained in:
parent
310778e02a
commit
d33fb9ed2c
|
@ -1,9 +1,15 @@
|
||||||
|
use axum::body::Body;
|
||||||
|
use axum::http::{HeaderMap, Request};
|
||||||
|
use axum::middleware::Next;
|
||||||
|
use axum::response::Response;
|
||||||
|
use opentelemetry::propagation::Extractor;
|
||||||
use opentelemetry::sdk::propagation::TraceContextPropagator;
|
use opentelemetry::sdk::propagation::TraceContextPropagator;
|
||||||
use opentelemetry::sdk::trace;
|
use opentelemetry::sdk::trace;
|
||||||
use opentelemetry::sdk::trace::Sampler;
|
use opentelemetry::sdk::trace::Sampler;
|
||||||
use opentelemetry::sdk::Resource;
|
use opentelemetry::sdk::Resource;
|
||||||
use opentelemetry::{global, KeyValue};
|
use opentelemetry::{global, KeyValue};
|
||||||
use opentelemetry_otlp::WithExportConfig;
|
use opentelemetry_otlp::WithExportConfig;
|
||||||
|
use tracing_opentelemetry::OpenTelemetrySpanExt;
|
||||||
use tracing_subscriber::layer::SubscriberExt;
|
use tracing_subscriber::layer::SubscriberExt;
|
||||||
use tracing_subscriber::util::SubscriberInitExt;
|
use tracing_subscriber::util::SubscriberInitExt;
|
||||||
use tracing_subscriber::{filter::LevelFilter, EnvFilter, Layer};
|
use tracing_subscriber::{filter::LevelFilter, EnvFilter, Layer};
|
||||||
|
@ -79,3 +85,30 @@ pub fn init_logging(otlp_endpoint: Option<String>, otlp_service_name: String, js
|
||||||
.with(layers)
|
.with(layers)
|
||||||
.init();
|
.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct HeaderExtractor<'a>(&'a HeaderMap);
|
||||||
|
|
||||||
|
impl<'a> Extractor for HeaderExtractor<'a> {
|
||||||
|
fn get(&self, key: &str) -> Option<&str> {
|
||||||
|
let value = self.0.get(key).and_then(|v| v.to_str().ok());
|
||||||
|
value
|
||||||
|
}
|
||||||
|
|
||||||
|
fn keys(&self) -> Vec<&str> {
|
||||||
|
let keys: Vec<&str> = self.0.keys().map(|k| k.as_str()).collect();
|
||||||
|
keys
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn trace_context_middleware(request: Request<Body>, next: Next) -> Response {
|
||||||
|
let parent_ctx = global::get_text_map_propagator(|prop| {
|
||||||
|
let headers = request.headers();
|
||||||
|
let extractor = HeaderExtractor(headers);
|
||||||
|
prop.extract(&extractor)
|
||||||
|
});
|
||||||
|
|
||||||
|
let span = tracing::Span::current();
|
||||||
|
span.set_parent(parent_ctx);
|
||||||
|
|
||||||
|
next.run(request).await
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::kserve::{
|
||||||
kserve_model_metadata, kserve_model_metadata_ready,
|
kserve_model_metadata, kserve_model_metadata_ready,
|
||||||
};
|
};
|
||||||
use crate::validation::ValidationError;
|
use crate::validation::ValidationError;
|
||||||
use crate::ChatTokenizeResponse;
|
use crate::{logging, ChatTokenizeResponse};
|
||||||
use crate::{
|
use crate::{
|
||||||
usage_stats, BestOfSequence, Details, ErrorResponse, FinishReason, FunctionName,
|
usage_stats, BestOfSequence, Details, ErrorResponse, FinishReason, FunctionName,
|
||||||
GenerateParameters, GenerateRequest, GenerateResponse, GrammarType, HubModelInfo,
|
GenerateParameters, GenerateRequest, GenerateResponse, GrammarType, HubModelInfo,
|
||||||
|
@ -2305,6 +2305,7 @@ async fn start(
|
||||||
.layer(Extension(infer))
|
.layer(Extension(infer))
|
||||||
.layer(Extension(compute_type))
|
.layer(Extension(compute_type))
|
||||||
.layer(Extension(prom_handle.clone()))
|
.layer(Extension(prom_handle.clone()))
|
||||||
|
.layer(axum::middleware::from_fn(logging::trace_context_middleware))
|
||||||
.layer(OtelAxumLayer::default())
|
.layer(OtelAxumLayer::default())
|
||||||
.layer(cors_layer);
|
.layer(cors_layer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue