[model-gateway][tracing]: implement request tracing using OpenTelemetry with trace context propagation (HTTP) (#13897)

This commit is contained in:
Feng Su
2025-12-06 05:59:04 -08:00
committed by GitHub
parent 6d41791823
commit e12c6b320f
19 changed files with 814 additions and 35 deletions
+29 -18
View File
@@ -35,6 +35,7 @@ use crate::{
logging::{self, LoggingConfig},
metrics::{self, PrometheusConfig},
middleware::{self, AuthConfig, QueuedRequest},
otel_trace,
protocols::{
chat::ChatCompletionRequest,
classify::ClassifyRequest,
@@ -703,25 +704,35 @@ pub fn build_app(
pub async fn startup(config: ServerConfig) -> Result<(), Box<dyn std::error::Error>> {
static LOGGING_INITIALIZED: AtomicBool = AtomicBool::new(false);
if let Some(trace_config) = &config.router_config.trace_config {
otel_trace::otel_tracing_init(
trace_config.enable_trace,
Some(&trace_config.otlp_traces_endpoint),
)?;
}
let _log_guard = if !LOGGING_INITIALIZED.swap(true, Ordering::SeqCst) {
Some(logging::init_logging(LoggingConfig {
level: config
.log_level
.as_deref()
.and_then(|s| match s.to_uppercase().parse::<Level>() {
Ok(l) => Some(l),
Err(_) => {
warn!("Invalid log level string: '{s}'. Defaulting to INFO.");
None
}
})
.unwrap_or(Level::INFO),
json_format: false,
log_dir: config.log_dir.clone(),
colorize: true,
log_file_name: "sgl-model-gateway".to_string(),
log_targets: None,
}))
Some(logging::init_logging(
LoggingConfig {
level: config
.log_level
.as_deref()
.and_then(|s| match s.to_uppercase().parse::<Level>() {
Ok(l) => Some(l),
Err(_) => {
warn!("Invalid log level string: '{s}'. Defaulting to INFO.");
None
}
})
.unwrap_or(Level::INFO),
json_format: false,
log_dir: config.log_dir.clone(),
colorize: true,
log_file_name: "sgl-model-gateway".to_string(),
log_targets: None,
},
config.router_config.trace_config.clone(),
))
} else {
None
};