Files
qiming/qiming-mcp-proxy/mcp-proxy/src/server/telemetry.rs
2026-06-01 13:03:20 +08:00

61 lines
1.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use anyhow::Result;
use opentelemetry::global;
use opentelemetry_sdk::trace::{RandomIdGenerator, Sampler, SdkTracerProvider};
/// 初始化 OpenTelemetry tracer provider
///
/// 这个函数必须在创建 telemetry layer 之前调用
pub fn init_tracer_provider(_service_name: &str, _service_version: &str) -> Result<()> {
// 创建 tracer provider
let tracer_provider = SdkTracerProvider::builder()
.with_sampler(Sampler::AlwaysOn)
.with_id_generator(RandomIdGenerator::default())
.build();
// 设置全局 tracer provider
global::set_tracer_provider(tracer_provider);
Ok(())
}
/// 创建增强的 OpenTelemetry layer
///
/// 这个函数创建一个配置好的 OpenTelemetry layer可以与现有的 tracing 配置集成
/// 注意:必须先调用 init_tracer_provider()
pub fn create_telemetry_layer() -> impl tracing_subscriber::Layer<tracing_subscriber::Registry> {
tracing_opentelemetry::layer()
}
/// 记录服务启动信息
///
/// 在 telemetry 系统初始化后调用,记录服务的基本信息
pub fn log_service_info(service_name: &str, service_version: &str) -> Result<()> {
tracing::info!(
service_name = %service_name,
service_version = %service_version,
"Service started with OpenTelemetry tracing enabled"
);
Ok(())
}
/// 优雅关闭 OpenTelemetry
pub fn shutdown_telemetry() {
tracing::info!("Shutting down OpenTelemetry");
// 注意:在新版本的 OpenTelemetry 中shutdown 方法可能不同
// 这里我们简单地记录关闭信息
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_log_service_info() {
let result = log_service_info("test-service", "0.1.0");
assert!(result.is_ok());
// 清理
shutdown_telemetry();
}
}