Skip to content

监控使用情况(OpenTelemetry)

Claude Code 通过 OpenTelemetry(OTel)导出遥测数据,帮助企业跨组织追踪 Token 消耗、API 成本和工具活动。支持指标(时间序列)、日志/事件和分布式链路追踪(beta)三个信号通道,兼容 OTLP/gRPC、OTLP/HTTP、Prometheus 和 Console 等主流导出后端。管理员可通过托管设置文件集中配置,遥测默认关闭,需要显式启用。

通过 OpenTelemetry(OTel)导出遥测数据,跨组织追踪 Claude Code 使用情况、成本和工具活动。Claude Code 通过标准指标协议导出时间序列数据,通过日志/事件协议导出事件,还可选开启分布式链路追踪(beta)


快速开始

通过环境变量配置 OpenTelemetry:

bash
# 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 端点(使用 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  # 10 秒(默认:60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000     # 5 秒(默认:5000ms)

claude

完整配置选项参见 OpenTelemetry specification


管理员配置

管理员可通过托管设置文件为所有用户集中配置 OpenTelemetry:

json
{
  "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_ENABLE_TELEMETRY启用遥测收集(必填)1
OTEL_METRICS_EXPORTER指标导出器类型(逗号分隔),none 禁用consoleotlpprometheusnone
OTEL_LOGS_EXPORTER日志/事件导出器类型,none 禁用consoleotlpnone
OTEL_EXPORTER_OTLP_PROTOCOLOTLP 协议,适用于所有信号grpchttp/jsonhttp/protobuf
OTEL_EXPORTER_OTLP_ENDPOINTOTLP 收集器端点,适用于所有信号http://localhost:4317
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL指标专用协议,覆盖通用设置grpchttp/jsonhttp/protobuf
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT指标专用端点,覆盖通用设置http://localhost:4318/v1/metrics
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL日志专用协议,覆盖通用设置grpchttp/jsonhttp/protobuf
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT日志专用端点,覆盖通用设置http://localhost:4318/v1/logs
OTEL_EXPORTER_OTLP_HEADERSOTLP 认证头Authorization=Bearer token
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEYmTLS 客户端私钥路径/path/to/client.key
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATEmTLS 客户端证书路径/path/to/client.crt
OTEL_METRIC_EXPORT_INTERVAL指标导出间隔(毫秒,默认 60000)5000
OTEL_LOGS_EXPORT_INTERVAL日志导出间隔(毫秒,默认 5000)1000
OTEL_LOG_USER_PROMPTS启用用户提示内容记录(默认禁用)1
OTEL_LOG_TOOL_DETAILS记录工具参数:Bash 命令、MCP 服务器/工具名、技能名和工具输入(默认禁用)1
OTEL_LOG_TOOL_CONTENT在 span 事件中记录工具输入/输出内容(默认禁用,需开启链路追踪,内容截断在 60KB)1
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE指标时间性偏好(默认 delta),后端要求累积时设为 cumulativedeltacumulative
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS动态 Headers 刷新间隔(默认 1740000ms / 29 分钟)900000

基数控制变量

控制指标中包含的属性,以管理基数(影响存储成本和查询性能):

变量说明默认值
OTEL_METRICS_INCLUDE_SESSION_ID在指标中包含 session.id 属性true
OTEL_METRICS_INCLUDE_VERSION在指标中包含 app.version 属性false
OTEL_METRICS_INCLUDE_ACCOUNT_UUID在指标中包含 user.account_uuiduser.account_idtrue

链路追踪(beta)

分布式链路追踪将每个用户提示与其触发的 API 请求和工具执行关联,可以在追踪后端中将完整请求视为单条链路。

链路追踪默认关闭,启用方式:

bash
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
export OTEL_TRACES_EXPORTER=otlp     # 或 console

链路追踪复用通用 OTLP 配置变量的端点、协议和认证头设置。

变量说明示例值
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA启用 span 追踪(必填),也接受 ENABLE_ENHANCED_TELEMETRY_BETA1
OTEL_TRACES_EXPORTER追踪导出器类型(逗号分隔),none 禁用consoleotlpnone
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL追踪专用协议,覆盖通用设置grpchttp/jsonhttp/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT追踪专用端点,覆盖通用设置http://localhost:4318/v1/traces
OTEL_TRACES_EXPORT_INTERVALspan 批量导出间隔(毫秒,默认 5000)1000

TRACEPARENT 自动继承:链路追踪激活时,Claude 运行的 Bash 和 PowerShell 子进程自动继承 TRACEPARENT 环境变量(包含当前工具执行 span 的 W3C 链路上下文)。支持 TRACEPARENT 的子进程可以在同一链路下挂载自己的 span,实现端到端分布式追踪。

隐私:span 默认不包含用户提示文本、工具输入详情和工具内容。设置 OTEL_LOG_USER_PROMPTS=1OTEL_LOG_TOOL_DETAILS=1OTEL_LOG_TOOL_CONTENT=1 可选择性包含。


动态 Headers

对于需要动态认证的企业环境,通过脚本动态生成 Headers:

.claude/settings.json 中配置:

json
{
  "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"
}

脚本要求输出有效的 JSON 键值对(HTTP Headers):

bash
#!/bin/bash
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

脚本在启动时运行,此后定期刷新(默认每 29 分钟),可通过 CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS 自定义间隔。


多团队支持

使用 OTEL_RESOURCE_ATTRIBUTES 添加自定义属性区分不同团队:

bash
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

这些自定义属性会包含在所有指标和事件中,可用于按团队/部门过滤、按成本中心追踪费用、创建团队专属仪表板或设置特定团队的告警。


使用示例配置

bash
# 控制台调试(1 秒间隔)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000

# OTLP/gRPC
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

# Prometheus
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus

# 指标和日志使用不同端点
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

# 仅指标(不需要日志/事件)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

# 仅日志/事件(不需要指标)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

可用指标

标准属性

所有指标和事件共享:session.idapp.versionorganization.iduser.account_uuiduser.account_iduser.iduser.emailterminal.type

指标列表

指标名称说明单位
claude_code.session.count启动的 CLI 会话数count
claude_code.lines_of_code.count修改的代码行数(含 type 属性:added/removedcount
claude_code.pull_request.count创建的 Pull Request 数count
claude_code.commit.count创建的 Git 提交数count
claude_code.cost.usage会话成本(含 model 属性)USD
claude_code.token.usage使用的 Token 数量(含 typeinput/output/cacheRead/cacheCreationmodel 属性)tokens
claude_code.code_edit_tool.decision代码编辑工具权限决策数(含 tool_namedecisionsourcelanguagecount
claude_code.active_time.total总活跃时间s

可用事件

启用 OTEL_LOGS_EXPORTER 后导出。prompt.id(UUID v4)用于关联处理单个用户提示时产生的所有事件。

事件名称触发时机包含属性
claude_code.user_prompt用户提交提示时
claude_code.tool_result工具完成执行时tool_namesuccessduration_mserrordecision_typedecision_sourcetool_result_size_bytes
claude_code.api_request发送 API 请求时modelcost_usdduration_msinput_tokensoutput_tokenscache_read_tokenscache_creation_tokensspeedfast/normal
claude_code.api_errorAPI 请求失败时
claude_code.tool_decision做出工具权限决策时

安全和隐私

  • 遥测是选择加入的,需要显式设置 CLAUDE_CODE_ENABLE_TELEMETRY=1
  • 不包含原始文件内容和代码片段
  • 默认不收集用户提示内容(只记录提示长度)
  • MCP 服务器/工具名称和技能名称默认不记录
  • 所有数据传输使用你配置的 OTLP 端点,Anthropic 不会接收遥测数据

相关资源


常见问题

Q: 遥测数据会发送给 Anthropic 吗?

不会。遥测数据只发送到你配置的 OTLP 端点(可以是你自己的 Grafana、Prometheus 或其他后端)。Anthropic 不接收这些数据。

Q: 如何在不同团队之间区分遥测数据?

使用 OTEL_RESOURCE_ATTRIBUTES 添加自定义标签,如 team.id=platform,cost_center=eng-123。这些标签会附加到所有指标和事件上,方便在监控后端按团队过滤。

Q: 分布式链路追踪(Traces)适合什么场景?

适合需要深入分析单个用户请求完整执行链路的场景——可以看到一次提示触发了哪些工具、每个工具的耗时、以及对应的 API 调用成本。对排查慢响应和优化 Token 使用很有帮助。目前为 beta 功能,需要额外设置 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1