监控与遥测(OpenTelemetry)
用 OpenTelemetry 导出 Claude Code 的用量、成本和工具活动:快速开始、管理员配置、常用变量、指标与事件,以及隐私相关开关。
通过 OpenTelemetry(OTel)导出遥测数据,可以在整个组织范围内跟踪 Claude Code 的用量、成本和工具活动:指标以标准指标协议导出为时间序列,事件通过日志/事件协议导出,另外还有可选的分布式追踪(beta)。
快速开始
用环境变量配置:
# 1. 启用遥测
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. 选择导出器(都是可选的,只配需要的)
export OTEL_METRICS_EXPORTER=otlp # 可选:otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # 可选:otlp, console, none
# 3. 配置 OTLP 端点
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. 需要认证时设置请求头
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. 调试时缩短导出间隔,生产环境要改回来
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 默认 60000ms
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 默认 5000ms
claude验证:导出指标的配置,在后端找 claude_code.session.count(会话启动时发出);只导出日志的配置,提交一个提示词后找 claude_code.user_prompt 事件。没数据时用 claude --debug-file <path> 启动,导出器的失败会以 [3P telemetry] 错误出现([Anthropic telemetry] 前缀的行描述的是 Anthropic 自己的运营遥测,不代表你的配置有问题)。
管理员配置
管理员可以通过托管设置文件为所有用户配置 OpenTelemetry,例如:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
}
}几个要点:
- Claude Code 忽略仓库里
.claude/settings.json和.claude/settings.local.json中的 OTel 导出器变量,仓库无法借此开启遥测、选择去向或捕获内容;请在托管设置里,或由开发者在自己的 shell /~/.claude/settings.json里设置。仓库仍可把某个信号的导出器选择器(如OTEL_LOGS_EXPORTER)设为none来关掉它,除非托管设置、--settings文件或启动环境已设置该变量。 - Claude Code 不会把
OTEL_*变量传给它启动的子进程(Bash 工具、hooks、MCP 服务器、语言服务器)。 - 托管设置锁定 OTLP 去向:在托管设置里设置了
OTEL_EXPORTER_OTLP_*变量后,Claude Code 会在启动时移除与之冲突的开发者变量并在调试日志里警告。设置了OTEL_EXPORTER_OTLP_ENDPOINT会移除开发者设置的所有分信号端点;设置了协议变量会移除所有分信号协议;设置了HEADERS、客户端密钥或客户端证书时,会移除对应的分信号版本,并移除所有开发者设置的端点变量(避免凭据发到托管设置没有选定的收集器)。导出器选择器(OTEL_METRICS_EXPORTER、OTEL_LOGS_EXPORTER)按正常的逐键优先级处理,开发者仍可禁用某个信号,需要锁定就在托管设置里也设。
常用配置变量
| 变量 | 说明 |
|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY | 启用遥测收集(必需),设为 1 |
OTEL_METRICS_EXPORTER | 指标导出器,逗号分隔;console、otlp、prometheus、none |
OTEL_LOGS_EXPORTER | 日志/事件导出器;console、otlp、none |
OTEL_EXPORTER_OTLP_PROTOCOL | 所有信号的 OTLP 协议;Claude Code 没有默认协议,每个 otlp 导出器都要设它或分信号协议;grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT | 所有信号的收集器端点 |
OTEL_EXPORTER_OTLP_{METRICS,LOGS}_{PROTOCOL,ENDPOINT,HEADERS} | 分信号覆盖;分信号 headers 与通用 headers 合并 |
OTEL_EXPORTER_OTLP_HEADERS | OTLP 认证请求头 |
OTEL_METRIC_EXPORT_INTERVAL / OTEL_LOGS_EXPORT_INTERVAL | 导出间隔(毫秒),默认 60000 / 5000 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | 指标时间性,默认 delta;后端需要累积值时设 cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS | 动态请求头刷新间隔,默认 29 分钟 |
内容与隐私相关开关(默认全部关闭)
这些开关决定遥测里是否带上敏感内容,开启前要评估合规风险:
OTEL_LOG_USER_PROMPTS:记录用户提示词内容OTEL_LOG_ASSISTANT_RESPONSES:记录助手回复文本;未设置时回退到OTEL_LOG_USER_PROMPTS的值OTEL_LOG_TOOL_DETAILS:记录工具参数和输入(Bash 命令、MCP 服务器和工具名、skill 名等)OTEL_LOG_TOOL_CONTENT:在追踪里记录工具内容(需先启用追踪)OTEL_LOG_MANAGED_SETTINGS:在托管设置解析事件里附带脱敏后的托管设置及其 SHA-256 摘要OTEL_LOG_RAW_API_BODIES:输出完整的 Messages API 请求/响应 JSON,包含整个对话历史,开启它意味着同意上面所有内容的记录CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH:内容类属性的最大长度,默认 60 KB
指标
| 指标 | 说明 | 单位 |
|---|---|---|
claude_code.session.count | 启动的 CLI 会话数 | 无 |
claude_code.lines_of_code.count | 修改的代码行数 | 无 |
claude_code.pull_request.count | 创建的 PR 数 | 无 |
claude_code.commit.count | 创建的 git 提交数 | 无 |
claude_code.cost.usage | 会话成本 | USD |
claude_code.token.usage | 使用的 token 数 | tokens |
claude_code.code_edit_tool.decision | 代码编辑工具权限决策次数 | 无 |
claude_code.active_time.total | 活跃总时长 | s |
只用 prometheus 导出器时,Claude Code 会省略 USD、tokens、s 单位,保证抓取结果是合法的 Prometheus 文本格式。
事件、分析与审计
除指标外,Claude Code 还导出大量事件(用户提示词、工具结果、API 请求、权限决策、MCP 活动等),可用于:
- 用量与成本监控:按用户、模型、团队分段,设置告警,识别重试耗尽等问题
- 安全审计:把操作归因到用户,审计 MCP 活动,把安全问题映射到对应事件,并把事件送入 SIEM
- 多团队组织:用资源属性区分团队和部门
- ROI 衡量:官方提供相关资源
每个事件和属性的详细字段、追踪(beta)的 span 结构、动态请求头配置、各后端(指标、事件/日志、追踪)的注意事项、Amazon Bedrock 上的监控方式,请以官方原文为准。