
Claude Code 的 Monitoring 把用量、成本、工具活动和调用链导出到 OpenTelemetry。本篇拆解 metrics、events、traces 的分工、最小接入配置、隐私开关和团队落地顺序,帮助开发者把 AI 编程从个人黑箱变成可观察的工程系统。
| 层级 | 你拿到什么 | 适合回答的问题 |
|---|---|---|
| Metrics | 会话数、代码改动行数、PR 数、commit 数、成本、token、编辑工具决策、活跃时间等指标。2 | 哪些团队、入口、模型、子 Agent 最耗资源?趋势有没有异常? |
| Events | user_prompt、assistant_response、tool_result、api_request、api_error 等事件。3 | 某一次失败发生在哪一步?工具是被拒绝、失败,还是模型请求报错? |
| Traces | 每个 prompt 到 API 请求、工具执行、hook、子 Agent 的 span 树。tracing 默认关闭,需要额外打开 beta 开关。4 | 一次复杂任务为什么慢?子 Agent、工具、模型请求之间的调用链是什么? |
/doctor 不是一回事。/doctor 是本机健康检查,能检查安装、settings、MCP server 和 context usage;如果 claude 启动不了,可以在 shell 里跑 claude doctor。5 Monitoring 则是把运行数据持续导出给你的监控后端,用来做团队级观察、告警和审计。CLAUDE_CODE_ENABLE_TELEMETRY=1,再按需选择 OTEL_METRICS_EXPORTER 和 OTEL_LOGS_EXPORTER,OTLP exporter 可以配置协议、endpoint 和认证 header。6 文档还写明,metrics 默认 60 秒导出一次,logs 默认 5 秒导出一次;调试时可以缩短,生产环境要记得调回去。6# 1. 打开 Claude Code telemetry
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. 指标:适合进 Prometheus / OTLP collector / 可视化看板
export OTEL_METRICS_EXPORTER=otlp
# 3. 事件:适合排查某次 prompt、tool、API 请求
export OTEL_LOGS_EXPORTER=otlp
# 4. OTLP 目的地
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
claudeconsole,或者只开 metrics、只开 events/logs。7 这对第一次接入很有用:先确认字段长什么样,再决定要不要送进正式 collector。claude_code.cost.usage 记录会话成本,claude_code.token.usage 记录 token 用量,claude_code.active_time.total 记录用户交互和 CLI 处理产生的活跃时间;它还会导出 claude_code.code_edit_tool.decision,统计 Edit、Write、NotebookEdit 这类代码编辑工具的权限决策。2| 看板问题 | 建议字段 | 你能发现什么 |
|---|---|---|
| 成本有没有突然升高? | claude_code.cost.usage,按 model、query_source、speed、effort 聚合。10 | 某个子 Agent、某个模式或某类请求在烧钱。 |
| token 是否被上下文拖大? | claude_code.token.usage,按 input、output、cacheRead、cacheCreation 区分。11 | 是输入上下文太大,还是输出过长,或者缓存命中结构不对。 |
| 编辑工具为什么频繁卡住? | claude_code.code_edit_tool.decision,按 tool_name、decision、source、language 看。12 | 是权限规则太紧、hook 拦截太多,还是用户在高频拒绝某类改动。 |
| 开发者到底有没有在等? | claude_code.active_time.total 按 user 和 cli 区分。13 | 时间花在用户输入阅读,还是 CLI/工具执行。 |
OTEL_METRICS_INCLUDE_SESSION_ID、OTEL_METRICS_INCLUDE_VERSION、OTEL_METRICS_INCLUDE_ACCOUNT_UUID、OTEL_METRICS_INCLUDE_ENTRYPOINT、OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES 这组开关来控制 metrics 里的 attributes;文档也提醒,降低 cardinality 通常能换来更好的查询性能和更低的存储成本。14prompt.id 串起一次任务prompt.id 是把这些事件关联回同一个 prompt 的 UUID。15 它不会挂到 metrics 上,因为每个 prompt 都会生成唯一 ID,放进指标会造成无限增长的时间序列;文档建议把它用于 event-level 分析和审计。15api_error 看模型请求有没有失败。这个事件会记录 model、error、status_code、duration_ms、attempt、request_id、speed、query_source、effort 等信息。16tool_result 看工具是否执行成功。它会记录 tool_name、tool_use_id、success、duration_ms、error_type、输入输出大小,以及权限决策来源等字段。17assistant_response 是否真的产出了文本。这个事件只包含模型响应里的文本块,不包含 thinking block 和 tool-use block;它要求 Claude Code v2.1.193 或更高版本。18OTEL_LOG_USER_PROMPTS 默认关闭;OTEL_LOG_ASSISTANT_RESPONSES 默认也不会直接暴露响应文本,且未设置时会跟随 OTEL_LOG_USER_PROMPTS;OTEL_LOG_TOOL_DETAILS 会打开 Bash 命令、MCP server/tool 名称、skill 名称和工具输入等细节。19 更重的 OTEL_LOG_RAW_API_BODIES 会导出完整 Messages API 请求和响应 JSON,文档明确说 bodies 包含完整 conversation history,打开它等同于同意暴露 prompt、tool details 和 tool content 会揭示的所有内容。19CLAUDE_CODE_ENABLE_TELEMETRY=1 和 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1,再设置 OTEL_TRACES_EXPORTER。4claude_code.interaction 作为 root span,下面挂 API request、tool call、hook;tool span 又有等待权限决策和实际执行两个子 span;Agent tool 或 legacy Task tool 生成子 Agent 时,子 Agent 的 API 和 tool spans 会嵌套在父级 claude_code.tool span 下面。20TRACEPARENT,这样读这个变量的子进程可以把自己的 spans 挂到同一条 trace 下面。4 如果 Claude Code 直接连 Anthropic API,模型请求还会携带 W3C traceparent header;通过自定义 ANTHROPIC_BASE_URL proxy 时,默认不传播,需要设置 CLAUDE_CODE_PROPAGATE_TRACEPARENT=1。4OTEL_METRICS_EXPORTER=otlp 和 OTEL_LOGS_EXPORTER=otlp 送到统一 collector,先保留默认导出间隔。quick start 里默认 metrics 为 60000ms、logs 为 5000ms。6OTEL_RESOURCE_ATTRIBUTES 加 department=engineering,team.id=platform,cost_center=eng-123 这类自定义属性。文档要求它是逗号分隔的 key=value,不能有空格;需要空格时用下划线、camelCase 或 percent-encoding。21OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false 让它们只进 resource block,不进入每条 metric series 的 label。21OTEL_LOG_TOOL_DETAILS 或相关文本开关;查完关闭。prompt、工具输入、raw API bodies 都不是默认该开的东西。19OTEL_* 环境变量传给它启动的 Bash tool、hooks、MCP servers 和 language servers。也就是说,你通过 Bash tool 跑了一个自己带 OpenTelemetry 的应用,它不会自动继承 Claude Code 的 exporter endpoint 或 headers;需要在那个命令里单独设置。8CLAUDE_CODE_ENABLE_TELEMETRY=1,把 metrics exporter 指到 console 或 OTLP collector。6docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
docs.anthropic.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.