为你的FastAPI应用设置OpenTelemetry追踪(一)
内容提要
本文介绍如何为FastAPI应用设置OpenTelemetry追踪。首先安装相关包,配置TracerProvider和导出器,并启用FastAPI插桩。然后可在代码中创建自定义span跟踪关键步骤。最后通过Jaeger等后端工具查看和可视化追踪数据,帮助监控分布式系统中的请求链路。
延伸解读
包层级与选择
OpenTelemetry 将功能拆分为多个细粒度包,初学者可能感到困惑。其中 opentelemetry-api 是规范,opentelemetry-sdk 是实现,而 opentelemetry-exporter-otlp 负责将 span 导出到后端。理解这些包的职责有助于正确配置,避免遗漏或重复安装。
多处理器配置
TracerProvider 可以添加多个 span 处理器,例如同时使用 OTLPSpanExporter 发送到 Jaeger 和 ConsoleSpanExporter 输出到终端。这种设计便于调试和监控,但需注意处理器会并行工作,可能增加开销。
自定义 span 的嵌套
使用 context manager 创建 span 时,嵌套 span 会自动继承父 span 的上下文,无需手动传递 trace ID。这简化了代码,但需注意 span 的粒度,过度细分可能产生大量数据,影响性能。
Q&A
如何为FastAPI应用设置OpenTelemetry追踪?
首先安装必要的包:opentelemetry-api、opentelemetry-sdk、opentelemetry-exporter-otlp和opentelemetry-instrumentation-fastapi。然后配置TracerProvider和导出器,并调用FastAPIInstrumentor.instrument_app()启用FastAPI插桩。
OpenTelemetry中opentelemetry-api和opentelemetry-sdk有什么区别?
opentelemetry-api是规范定义,而opentelemetry-sdk是具体实现。
如何在FastAPI代码中创建自定义span?
使用trace.get_tracer(__name__)获取tracer,然后通过with tracer.start_as_current_span("span名称")来创建自定义span,嵌套span会自动继承父span的上下文。
有哪些工具可以查看OpenTelemetry追踪数据?
常见的工具有Jaeger、Zipkin和Grafana Tempo,其中Jaeger的UI功能更丰富。
如何启动Jaeger来查看追踪数据?
使用Docker运行Jaeger镜像:docker run --rm -p 16686:16686 -p 4317:4317 -p 4318:4318 -p 9411:9411 jaegertracing/jaeger:latest,然后访问localhost:16686查看UI。
OpenTelemetry中span processor的作用是什么?
span processor负责将生成的span发送到不同的目的地,例如OTLPSpanExporter发送到指定端点,ConsoleSpanExporter输出到控制台。一个tracer可以有多个span processor。