OpenLLMetry 是 Traceloop(2024 年被 Cisco 收购)开源的 LLM 可观测性 SDK,项目目标是给 LLM 应用一套「标准化遥测」方案。它解决的问题很具体:LLM 应用的调用链路——模型请求、向量检索、LangChain/LlamaIndex 的编排步骤——在传统 APM 里只是一堆无差别的 HTTP 网络 span,看不到 prompt、token 消耗、模型名、重试与缓存信息。OpenLLMetry 基于 OpenTelemetry(可观测性事实标准)构建,将 LLM 调用统一建模为带 GenAI 语义的 span,并通过自动插桩做到「一行代码接入」。安装 traceloop-sdk 后调用 Traceloop.init(),即可把追踪数据导出到 Traceloop Cloud、Datadog、Grafana、Jaeger 等任何支持 OTLP 的后端。本篇按「安装 → 快速上手 → 核心能力 → 生产部署 → 选型对比」的顺序,让你在 10 分钟内完成接入并理解其设计取舍。

岗位关联

掌握 OpenLLMetry,意味着你能用行业标准的 OpenTelemetry 统一观测所有 LLM 应用,这是 MLOps、后端与可观测性工程师搭建 AI 基础设施的核心技能。

目录
  1. 为什么需要 OpenLLMetry:LLM 调用不透明,标准遥测是解药
  2. 安装与环境配置:4 步就绪
  3. 快速上手:5 分钟跑通第一个 LLM 追踪
  4. 核心能力详解:3 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
LLM 可观测性 SDK(开源遥测库)
开发商
Traceloop(2024 年被 Cisco 收购)
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Python(另有 TypeScript 版 openllmetry-js)
当前版本
v1.45.0(2024-12 发布)
安装方式
`pip install traceloop-sdk`
下载地址
无
官方文档
无
上手难度
★★☆☆☆(低)
适合人群
LLM 应用开发者、MLOps 工程师、可观测性工程师
同类工具
Langfuse、Arize Phoenix、LangSmith
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 OpenLLMetry:LLM 调用不透明,标准遥测是解药

传统方式下,LLM 应用的可观测性面临三个断层。第一,模型调用本质是一次对外 HTTP 请求,普通 APM 只能记录网络耗时状态码,看不到 prompt、模型名、token 用量、重试与缓存命中等业务语义;第二,RAG 应用的链路横跨向量库检索、上下文拼接、模型生成多个阶段,日志分散在各组件中,排障时需要人工拼接时间线;第三,token 消耗直接对应成本,传统监控无法按模型、按用户、按服务维度自动汇总用量,成本超支往往到月底账单出来才发现。

OpenLLMetry 的解法是把「模型调用」这类 LLM 特有动作建模成带 GenAI 语义约定的 span(追踪链路中的最小工作单元),覆盖 LLM 调用、Embedding、向量库检索、框架编排步骤等场景。它提供自动插桩机制,安装对应扩展包后,只需在程序入口调用一次 Traceloop.init(),SDK 就会自动包装 LangChain、LlamaIndex、CrewAI、OpenAI 等调用,业务代码不需要做任何侵入式修改。由于整条数据链路基于 OpenTelemetry 标准,采集到的 trace 可以导出到任何兼容 OTLP 的后端,而不是被困在某个特定平台的私有格式里。

与 Langfuse、LangSmith 这类「闭环平台」相比,OpenLLMetry 的气质差异在于它只做「遥测接入层」:不自带可视化前端、不强绑定存储,数据模型遵循公共标准。这意味着它天然适合已经有 Prometheus/Grafana/Jaeger 等基础设施、看重数据主权与技术标准化的团队;而希望开箱即得现成看板与评测功能的团队,则通常选择 Langfuse 这类平台型产品。

安装与环境配置:4 步就绪

步骤一:安装 SDK 与对应插桩扩展。 基础包是 traceloop-sdk;按使用的框架选择 tracing-* 扩展。注意当前版本为 1.45.0,建议锁定版本避免与后续发布产生兼容性差异。

步骤二:配置导出目标。 使用 Traceloop Cloud 时设置 TRACELOOP_API_KEY 与 TRACELOOP_BASE_URL;自建 OTLP 后端时设置 OTEL_EXPORTER_OTLP_ENDPOINT 指向 Collector 地址,并通过 OTEL_EXPORTER_OTLP_HEADERS 携带认证信息。

步骤三:在代码入口初始化。 调用 Traceloop.init(app_name="你的应用名"),SDK 会完成 exporter 初始化和各框架自动插桩的注册。

步骤四:验证。 运行应用发起一次 LLM 调用,在 Traceloop 控制台或自建 Grafana 中查看生成的 trace。

注意:TRACELOOP_BASE_URL 与 OTEL_EXPORTER_OTLP_ENDPOINT 二选一即可,两者同时存在时以后者为准。若均未配置,SDK 没有上报目标,trace 会被静默丢弃。

bash14 行
# 1. 安装(以 OpenAI + LangChain 为例)pip install 'traceloop-sdk[tracing-openai]==1.45.0'pip install 'traceloop-sdk[tracing-langchain]==1.45.0' # 2. 配置环境变量(Traceloop Cloud 方式)export TRACELOOP_API_KEY=your_api_keyexport TRACELOOP_BASE_URL=https://api.traceloop.com # 自建 OTLP 后端时改用下面两行:# export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318# export OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer your_token # 3. 运行应用python your_app.py

快速上手:5 分钟跑通第一个 LLM 追踪

最小可用闭环是:安装扩展 → 初始化 SDK → 发起一次模型调用 → 在控制台查看 span 树。OpenAI 调用会被 openai 插桩器自动包装,你不需要手工创建或关闭 span。

1. 创建虚拟环境并安装:pip install 'traceloop-sdk[tracing-openai]==1.45.0'

2. 新建 app.py,在文件顶部 from traceloop.sdk import Traceloop 并调用 Traceloop.init(app_name="hello_llm")

3. 设置环境变量 TRACELOOP_API_KEY 和 TRACELOOP_BASE_URL

4. 运行 python app.py,脚本会发起一次 ChatCompletion 请求

5. 打开 Traceloop 控制台的 Traces 页面,找到 hello_llm 应用的 trace,展开后可见 LLM span 中包含模型名、token 用量、耗时等属性

进阶技巧:若使用 LangChain,安装 traceloop-sdk[tracing-langchain] 后同样只需 Traceloop.init()——LangChain 自动插桩默认随初始化启用,Chain 内部的检索、提示词组装、LLM 调用会自动生成子 span,无需额外代码。

python11 行
from traceloop.sdk import Traceloopfrom openai import OpenAI Traceloop.init(app_name="hello_llm") client = OpenAI()response = client.chat.completions.create(    model="gpt-4o-mini",    messages=[{"role": "user", "content": "用一句话介绍 OpenTelemetry 语义约定。"}],)print(response.choices[0].message.content)

核心能力详解:3 大支柱

支柱一:GenAI 语义约定(标准化遥测)。 OpenLLMetry 依据 OpenTelemetry 的 GenAI 语义约定,为模型调用类 span 定义统一的属性命名,例如 AI 服务商、模型名、输入输出 token 用量、请求参数等。语义建模范式统一后,跨模型(GPT、Claude、Llama)、跨框架(LangChain、LlamaIndex、CrewAI)的遥测数据可以直接聚合对比,这是「标准化」三个字的核心价值。

支柱二:零代码自动插桩。 SDK 提供 tracing-openai、tracing-langchain、tracing-llamaindex、tracing-crewai、tracing-pinecone 等扩展包。安装扩展并在入口调用 Traceloop.init() 后,SDK 通过 OpenTelemetry instrumentation 机制自动包装目标框架的调用,创建对应的 span 与属性。生产代码零侵入,升级插桩能力只需升级 SDK 版本。

支柱三:OTLP 导出到任意后端。 遥测数据通过 OTLP 协议导出,目标可以是 Traceloop Cloud,也可以是自建 Collector、Grafana Tempo、Jaeger、Datadog、Honeycomb 等任何兼容 OTLP 的可观测性后端。数据模型是标准 OpenTelemetry trace,schema 对齐的 APM 可以直接消费,不存在厂商锁定。SDK 同时支持批量 span 处理器、采样等生产特性,可在高流量下控制上报开销。

生产部署与监控:从上线到运维

部署方式一:Traceloop Cloud。 注册账号后获取 API Key,设置 TRACELOOP_API_KEY 与 TRACELOOP_BASE_URL 即可。平台提供 trace 查看、token 用量聚合与成本分析、告警能力,免费额度适合中小团队快速上线,适合不想自建基础设施的场景。

部署方式二:自建 OTLP Collector。 将 OTEL_EXPORTER_OTLP_ENDPOINT 指向内部 Collector(如 Grafana Alloy/Tempo 或 Jaeger)。数据不出内网,满足金融、政企等数据合规要求;代价是需要自行维护 Collector 的容量、采样策略与存储生命周期。建议用 OTEL_RESOURCE_ATTRIBUTES 环境变量标注服务名与部署环境,便于多服务聚合检索。

可观测性要点。 默认配置下 span 不记录 prompt 与响应原文,涉及敏感数据时保持关闭,确需排查语义问题时再按服务粒度开启 OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true,并配合脱敏管道。高流量服务应开启尾部采样,只保留错误与慢 span;token 用量是成本指标,接入后应建立按 app_name 维度的用量看板与预算告警。

<p class=“para-label“>避坑清单:</p><ul class=”dash-list”><li>PyPI 包名是 traceloop-sdk 而非 openllmetry,执行 pip install openllmetry 会安装失败并误导排查方向</li><li>必须配置 OTLP 导出端点或 TRACELOOP_BASE_URL,否则 trace 静默丢弃且无任何报错</li><li>SDK 与各 tracing 扩展包版本必须锁定一致,混用不同版本可能导致插桩器加载失败</li><li>生产环境默认不记录消息内容是正确行为,不要为了「看得全」盲目开启消息捕获,会造成 PII 泄露风险</li><li>LangChain 自动插桩由 Traceloop.init 自动启用,重复手动初始化 instrumentation 会产生重复 span</li></ul>

维度OpenLLMetryLangfuseArize PhoenixLangSmith
定位LLM 遥测 SDK,OTel 标准数据链路LLM 可观测性与评测平台LLM/ML 可观测性平台LLM 追踪与评测 SaaS
编排范式自动插桩 + OTel 标准 span自家 SDK 结构化事件Phoenix SDK 集成 OTel自家 SDK 深度集成
类型约束无强制,可自定义 span/attribute平台内事件模型平台内 trace 模型平台内 trace 模型
学习曲线低(懂 OTel 则更低)中中低
生态集成任意 OTLP 后端,无锁定自家 UI + API自家 UI + OTel 兼容LangChain 生态绑定
生产部署自带 exporter,可配自建 Collector自托管 compose/K8s 或云自托管镜像或云仅云服务
LicenseApache 2.0MIT(自托管核心)Elastic License 2.0闭源商业
适合谁已有 OTel 栈、重数据主权的团队要开箱即用看板与评测的团队Notebook 内深度模型分析LangChain 重度用户

选型建议:已有 Prometheus/Grafana/Jaeger 体系的团队优先选 OpenLLMetry,遥测数据融入现有监控链路且无厂商锁定;想快速获得 LLM 专用看板、评测与标注功能的中小团队选 Langfuse;做模型实验阶段深度分析选 Arize Phoenix;深度绑定 LangChain 生态且预算充足选 LangSmith。

版本迭代

OpenLLMetry 由 traceloop-sdk 演进而来,2024 年完成向 OpenTelemetry GenAI 语义约定的对齐,并将插桩包按 tracing-* 命名体系重组。版本迭代节奏快,主线是扩大框架插桩覆盖面与提升生产环境稳定性。

版本时间变化提升
v1.30.02024-07遥测模型统一重构对齐 GenAI 语义约定,规范 span 与属性命名
v1.34.02024-08插桩生态扩展扩充框架与向量库的 tracing 扩展包
v1.40.02024-10稳定性修复修复 OTLP 上报与采样相关生产问题
v1.42.02024-11模型与框架适配适配主流模型 API 变更,完善框架追踪覆盖
v1.45.02024-12当前稳定版LangChain 自动插桩默认启用,文档与示例完善
结论

从版本脉络看,SDK 的重心已从「能追踪」转向「追踪得标准、部署得稳」。建议直接使用 1.45.x 系列,并在升级时先读 Changelog 确认插桩行为变更;若需要最新功能,关注官方 Release 页的新版本发布。

AI 应用场景

场景一:RAG 应用的故障定位

阶段:RAG 管道构建 / LLM 应用追踪

解决的问题:RAG 链路包含向量检索、上下文拼装、模型生成多个阶段,传统日志无法把「检索慢」和「生成慢」拆开。OpenLLMetry 自动为每个阶段生成子 span,一次请求的完整耗时分布一目了然,无需手工拼接日志。

具体案例:某知识库问答机器人(LangChain + 向量库)接入后,通过 trace 发现 P95 延迟中约 60% 消耗在向量检索而非模型生成,针对性优化索引后整体 P95 下降约 30%;故障定位时间从小时级缩短到 15 分钟以内。

场景二:多模型调用的成本与用量分析

阶段:模型成本追踪 / Token 用量聚合

解决的问题:业务同时调用 GPT-4o 与 Claude,成本分散在多张账单中。OpenLLMetry 将 token 用量作为标准 span 属性上报,可按服务、模型、时间维度聚合。

具体案例:某 AI 平台按 app_name 维度为每个业务线建立 token 用量看板,接入后月度成本核算从手工导表 2 天缩短到实时查看,并在用量突增时通过告警提前发现异常调用。

场景三:合规环境下统一接入自建观测栈

阶段:可观测性体系整合

解决的问题:数据合规要求 LLM 调用数据不得出内网,且团队已有 Grafana 监控体系,不愿再引入新 SaaS。OpenLLMetry 的 OTLP 导出能力让 LLM trace 直接进入内部链路。

具体案例:某金融科技团队将 OTEL_EXPORTER_OTLP_ENDPOINT 指向内部 Collector,LLM 应用与微服务 trace 在 Grafana Tempo 中统一检索,消息内容捕获保持关闭以满足合规审计要求。

常见误区

误区项目叫 OpenLLMetry,那 `pip install openllmetry` 应该就能装吧?结果装了个不存在的包,折腾半天。

正解PyPI 上的包名是 traceloop-sdk,安装命令为 pip install traceloop-sdk,框架扩展名为 traceloop-sdk[tracing-xxx]。安装任何与 openllmetry 相关的 Python 库,都应查 PyPI 确认包名,而不是按项目名推测。

为何常见:项目文档与 GitHub 仓库名都是 OpenLLMetry,而 PyPI 包名沿用了被收购前的 traceloop-sdk,命名不一致导致初学者按惯性推理。

误区既然数据要发给 Traceloop,那必须付费用它的云服务,否则没法用。

正解OpenLLMetry 是纯开源 SDK,遥测数据通过标准 OTLP 协议导出。不设置 TRACELOOP_BASE_URL 时,可以把 OTEL_EXPORTER_OTLP_ENDPOINT 指向自建 Collector、Grafana Tempo、Jaeger 等任意后端,数据不出内网也能完整使用。

为何常见:官方文档的快速开始默认展示 Traceloop Cloud 的配置方式,容易让新手误以为云服务是唯一路径。

误区SDK 装好了,`Traceloop.init()` 也调了,为什么控制台里什么都没有?

正解Traceloop.init() 只负责初始化 exporter 与插桩器,真正的上报目标由环境变量决定。未设置 OTEL_EXPORTER_OTLP_ENDPOINT 或 TRACELOOP_BASE_URL 时,trace 会因无导出目标而被静默丢弃,应用本身不报错,极易误判为「没产生数据」。

为何常见:SDK 设计上做了容错处理,初始化失败不打断业务主流程,导致配置缺失的反馈非常隐蔽。

误区trace 里看不到 prompt 和模型回复,是不是 SDK 坏了,或者需要付费版才有?

正解这是默认行为而非缺陷。为保护敏感数据,OpenTelemetry 的消息内容捕获默认关闭。需要记录 prompt 时必须显式设置 OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true,且生产环境应评估 PII 风险并配合脱敏。

为何常见:多数演示截图展示了带内容的完整 trace,让人误以为内容捕获是默认开启的。

误区看到有新版本就直接 `pip install -U traceloop-sdk`,结果扩展包 `tracing-langchain` 还是旧版,追踪数据突然不见了。

正解SDK 与各 tracing-* 扩展包必须保持同一版本号,否则插桩器可能与 SDK 内部接口不匹配。升级时应同步升级全部相关包,并固定在 requirements.txt 中,例如 traceloop-sdk[tracing-langchain]==1.45.0。

为何常见:pip install -U 默认只升级主包,依赖的扩展包不会自动同步升级,版本漂移很难被察觉。

面试题

Q1. 安装 OpenLLMetry Python SDK 时,正确的包名是?

单选题 · easy

  • A.pip install openllmetry
  • B.pip install traceloop-sdk← 正确答案
  • C.pip install otel-llm
  • D.pip install llm-traces

答案:B。项目名是 OpenLLMetry,但 PyPI 包名沿用了 traceloop-sdk。B 是官方发布的包名;A 会安装失败;C、D 是并不存在的包名。这类「项目名≠包名」的差异在工具链中很常见,安装前应查 PyPI 确认。

Q2. 将 LLM 遥测导出到自建 Collector 时,核心配置的环境变量是?

单选题 · easy

  • A.OTEL_EXPORTER_OTLP_ENDPOINT← 正确答案
  • B.OTEL_EXPORTER_OTLP_HEADERS
  • C.OTEL_EXPORTER_OTLP_INSECURE
  • D.OTEL_EXPORTER_OTLP_TIMEOUT

答案:A。OTEL_EXPORTER_OTLP_ENDPOINT 指定 OTLP 上报地址,是导出数据的核心变量;HEADERS 用于附加认证信息,INSECURE 控制是否跳过 TLS,TIMEOUT 控制超时,均属辅助配置。未设置端点时 trace 会被静默丢弃。

Q3. 以下哪些框架可通过 traceloop-sdk 的 tracing 扩展包自动插桩?

多选题 · mid

  • A.LangChain 框架← 正确答案
  • B.LlamaIndex 框架← 正确答案
  • C.CrewAI 框架← 正确答案
  • D.FastAPI 框架

答案:ABC。tracing-langchain、tracing-llamaindex、tracing-crewai 均为官方扩展包,对应 A、B、C。FastAPI 不在官方 tracing 扩展列表中,其 HTTP 层数据不在此 SDK 的自动插桩范围内,需自行通过 OpenTelemetry 其他组件观测。

Q4. 关于 trace 中记录 prompt 与响应原文的行为,以下说法正确的是?

单选题 · mid

  • A.默认记录全部请求与响应原文
  • B.默认不记录,需手动开启相关配置← 正确答案
  • C.是否记录由模型 API 提供方决定
  • D.只有开通付费版才会记录内容

答案:B。OpenTelemetry 的消息内容捕获默认关闭,OpenLLMetry 遵循该约定。需要记录时需设置 OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true。该行为与模型 API 无关,也与是否付费无关,纯由 SDK 配置控制。

Q5. Traceloop.init(app_name="xxx") 的主要作用是?

单选题 · mid

  • A.完成模型参数初始化
  • B.初始化 SDK 并启动插桩← 正确答案
  • C.创建并提交一条新 trace
  • D.把训练数据上传云端

答案:B。Traceloop.init 会初始化 exporter、设置资源属性并注册各框架的自动插桩器,是接入的唯一个人口。它不会初始化模型参数,也不直接创建 trace;trace 由后续真实调用触发生成,更与训练数据上传无关。

Q6. 生产环境使用 OpenLLMetry 的正确做法包括?

多选题 · hard

  • A.锁定 SDK 与扩展包版本一致← 正确答案
  • B.低流量时先关闭采样省开销
  • C.对含 PII 服务关闭消息捕获← 正确答案
  • D.只保留单一导出后端防重复

答案:AC。SDK 与 tracing 扩展必须同版本锁定,否则插桩器可能失效;含敏感数据的服务应保持消息捕获关闭,防止 PII 外泄。B 错误——低流量不是关闭采样的理由,高流量才需要采样控制成本;D 错误——多个导出后端并非禁止,可按需同时上报。

Q7. OpenLLMetry 与 Langfuse 最核心的差异是?

单选题 · hard

  • A.Langfuse 更强调使用开源协议
  • B.OpenLLMetry 基于 OTel 开放数据链路← 正确答案
  • C.OpenLLMetry 内置可视化看板
  • D.Langfuse 不支持 trace 导出

答案:B。OpenLLMetry 是纯遥测接入层,数据按 OpenTelemetry 标准产出并导出到任意 OTLP 后端,无厂商锁定;Langfuse 是平台型产品,自带 UI、存储与评测功能,数据在平台体系内流转。两者都不是靠「开源协议」或「有无看板」区分的。

Q8. 关于 openai 自动插桩,以下说法正确的是?

多选题 · mid

  • A.需要安装 tracing-openai 扩展包← 正确答案
  • B.必须在代码中手动包裹每次调用
  • C.自动生成 LLM 调用 span← 正确答案
  • D.Token 用量不会写入 span

答案:AC。安装 traceloop-sdk[tracing-openai] 后,OpenAI 的 chat completion 等调用会被自动包装并生成 LLM span,无需手动包裹每个调用。span 中会记录模型名、token 用量等属性,D 说法错误。

Q9. OpenLLMetry 使用的追踪数据标准是?

单选题 · easy

  • A.Zipkin 协议
  • B.OpenTelemetry 标准← 正确答案
  • C.StatsD 协议
  • D.Prometheus 指标

答案:B。OpenLLMetry 构建在 OpenTelemetry 之上,使用其 trace 模型、OTLP 导出协议与 GenAI 语义约定。Zipkin、StatsD、Prometheus 是其他类别的可观测性技术,不构成 OpenLLMetry 的数据基础。

Q10. 在 OpenTelemetry GenAI 语义约定中,输入 token 用量应记录在哪类 span 属性上?

单选题 · extreme

  • A.属性 gen_ai.usage.input_tokens← 正确答案
  • B.属性 gen_ai.request.max_tokens
  • C.属性 llm.input.usage
  • D.属性 token.input.count

答案:A。GenAI 语义约定使用 gen_ai.usage 前缀记录实际消耗的 token 用量,其中 input_tokens 表示输入 token;gen_ai.request.max_tokens 是请求参数而非实际用量。C、D 是并不存在的约定命名。掌握这一命名规范是读懂 LLM span 的基础。

参考来源