教程 pingora tutorial

请求追踪 (Tracing)

Pingora 支持 请求追踪(Tracing),可以记录请求在各阶段的执行情况,帮助开发者分析性能瓶颈和排查问题。

启用请求追踪

在配置文件中启用 tracing 模块:

yaml
tracing:
  enable: true
  level: debug
  output: stdout

`

  • enable:是否启用追踪
  • level:追踪日志级别(debug/info/warn)
  • output:日志输出目标,可为控制台或文件

使用示例

rust
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 集成)

rust
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();

应用场景

  1. 性能分析:追踪请求耗时,识别瓶颈
  2. 调试:记录请求路径、上下文状态和错误信息
  3. 监控:结合 Prometheus 或 Jaeger 进行可视化监控

通过请求追踪功能,Pingora 可以提供完整的请求生命周期监控,帮助开发者快速定位问题、优化性能和提升服务质量。