OpenTelemetry

OpenTelemetry 是可观测性的开源标准框架,提供 Traces、Metrics、Logs 三大信号的统一采集、处理和导出。它是 AI 服务可观测性的基础设施。

#type / concept #status / evergreen #tech / ai #tech / ops

[!info] related notes

OpenTelemetry

一句话定义

OpenTelemetry (OTel) 是可观测性的开源标准框架。它定义了 Traces(追踪)、Metrics(指标)、Logs(日志)三大信号的采集规范,让你可以用一套标准对接不同的后端(Jaeger、Prometheus、Grafana)。

核心原理

三大信号

信号用途例子
Traces请求链路追踪一次 Agent Run 的完整执行路径
Metrics聚合指标平均延迟、token 消耗、错误率
Logs离散事件”Tool X 调用失败”

在 AI Agent 中的应用

Traces: Agent Run → LLM Call → Tool Execution → LLM Call
Metrics: token_usage_total, llm_latency_seconds, tool_call_total
Logs: "User X triggered tool Y with args Z"

Python 集成

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider

# 初始化
provider = TracerProvider()
trace.set_tracer_provider(provider)
tracer = trace.get_tracer("ai-service")

# 创建 Span
async def agent_run(context):
    with tracer.start_as_current_span("agent_run") as span:
        span.set_attribute("user_id", context.user_id)
        span.set_attribute("session_id", context.session_id)

        # LLM 调用 Span
        with tracer.start_as_current_span("llm_call") as llm_span:
            response = await llm.chat(messages)
            llm_span.set_attribute("model", response.model)
            llm_span.set_attribute("input_tokens", response.usage.input_tokens)

        # 工具调用 Span
        with tracer.start_as_current_span("tool_call") as tool_span:
            result = await execute_tool(tool_call)
            tool_span.set_attribute("tool_name", tool_call.name)

常见坑

  1. 不做采样: 生产环境全量采集影响性能
  2. 不传播 Context: 跨服务时 Trace 断裂
  3. Span 太多: 每个 token 都创建 Span,数据量爆炸

参考资料

创建于 2026/6/30 更新于 2026/7/15