跳转至

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 年