OpenTelemetry 可观测¶
一句话概述:OpenTelemetry(OTel)是 CNCF 的可观测性标准框架,统一了追踪、指标、日志三大信号的采集和传输格式,一次埋点可输出到 Jaeger/Prometheus/Datadog 等任何后端。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| Trace | 追踪 = 一个请求在多个服务间的完整路径 |
| Span | 跨度 = 追踪中的一个操作单元 |
| Metric | 指标 = 数值型监控数据 |
| Log | 日志 = 文本型事件记录 |
| Exporter | 导出器 = 把数据发到特定后端 |
| Collector | 收集器 = 统一接收、处理、转发数据的中间层 |
| Instrumentation | 埋点 = 在代码中加入数据采集逻辑 |
安装配置¶
# Python SDK
pip install opentelemetry-api opentelemetry-sdk
pip install opentelemetry-exporter-otlp # OTLP 导出器
pip install opentelemetry-instrumentation-fastapi # FastAPI 自动埋点
基本使用¶
from opentelemetry import trace, metrics
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import Resource
# 初始化
resource = Resource.create({"service.name": "bioinfo-api"})
provider = TracerProvider(resource=resource)
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
trace.set_tracer_provider(provider)
tracer = trace.get_tracer("bioinfo-api")
# 手动创建 Span
with tracer.start_as_current_span("run_analysis") as span:
span.set_attribute("sample_id", "S001") # 添加属性
span.add_event("analysis_started") # 添加事件
# 执行分析...
span.set_status(trace.StatusCode.OK)
# FastAPI 自动埋点
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
FastAPIInstrumentor.instrument_app(app) # 自动追踪所有请求
OTel Collector 配置¶
# otel-collector-config.yaml
receivers:
otlp:
protocols:
grpc: { endpoint: "0.0.0.0:4317" }
http: { endpoint: "0.0.0.0:4318" }
processors:
batch: { timeout: 5s }
exporters:
jaeger: { endpoint: "jaeger:14250" }
prometheus: { endpoint: "0.0.0.0:8889" }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
速查表¶
# === 三大信号 ===
# Traces: 请求在服务间的流转路径(定位慢在哪)
# Metrics: 数值指标(CPU、QPS、延迟分布)
# Logs: 文本事件记录(调试详情)
# === 常用导出器 ===
# OTLP → 通用格式(推荐)
# Jaeger → 分布式追踪
# Prometheus → 指标监控
# Zipkin → 分布式追踪
# === 自动埋点库 ===
# opentelemetry-instrumentation-fastapi
# opentelemetry-instrumentation-django
# opentelemetry-instrumentation-flask
# opentelemetry-instrumentation-requests
# opentelemetry-instrumentation-sqlalchemy
参考:OpenTelemetry 文档 | 更新于 2026 年