请求追踪 (Tracing)
Pingora 支持 请求追踪(Tracing),可以记录请求在各阶段的执行情况,帮助开发者分析性能瓶颈和排查问题。
启用请求追踪
在配置文件中启用 tracing 模块:
tracing:
enable: true
level: debug
output: stdout
`
enable:是否启用追踪level:追踪日志级别(debug/info/warn)output:日志输出目标,可为控制台或文件
使用示例
use pingora::tracing::trace;
fn pre_filter(req: &Request, ctx: &mut Context) -> Result<(), Error> {
trace!("请求 {} 进入前置过滤器", req.path());
Ok(())
}
fn response_filter(_req: &Request, ctx: &mut Context) -> Result<(), Error> {
trace!("响应阶段执行完毕");
Ok(())
}
trace!宏记录请求执行信息- 可在不同阶段标记关键操作
分布式请求追踪
- Pingora 可集成 OpenTelemetry 或 Jaeger
- 每个请求生成唯一 trace_id
- 支持跨服务链路追踪,便于定位性能瓶颈
示例(OpenTelemetry 集成)
use opentelemetry::global;
use tracing_opentelemetry::OpenTelemetryLayer;
use tracing_subscriber::Registry;
let tracer = opentelemetry_jaeger::new_pipeline()
.with_service_name("pingora")
.install_simple()
.unwrap();
let telemetry = OpenTelemetryLayer::new(tracer);
let subscriber = Registry::default().with(telemetry);
tracing::subscriber::set_global_default(subscriber).unwrap();
应用场景
- 性能分析:追踪请求耗时,识别瓶颈
- 调试:记录请求路径、上下文状态和错误信息
- 监控:结合 Prometheus 或 Jaeger 进行可视化监控
通过请求追踪功能,Pingora 可以提供完整的请求生命周期监控,帮助开发者快速定位问题、优化性能和提升服务质量。
相关内容
- 高级主题 (WIP) 探索 Pingora 的高级特性,包括内部机制、异步运行时、线程模型和自定义扩展。
- 后台服务 学习如何在 Pingora 中配置和运行后台服务,包括定时任务、异步执行和守护进程管理。
- 异步上下文中的阻塞代码 学习如何在 Pingora 异步运行时中处理阻塞代码,确保高并发请求环境下的性能和稳定性。
- 构建 HTTP 代理 学习如何使用 Pingora 构建 HTTP 代理服务,包括基本请求转发、上游配置和自定义过滤器。
- 配置文件 了解 Pingora 的配置文件结构、主要参数及其作用,学习如何为不同场景编写高效、清晰的配置。
- 连接池与复用 学习如何在 Pingora 中使用连接池和连接复用,提高代理服务的性能和资源利用率。