遥测与用量 · 收什么、不收什么、怎么关
一个开源 agent 收哪些数据、怎么保护隐私、企业怎么接自己的 collector?这一章看 grok 的三档遥测模式、内外两套 OTel 管道、外部遥测那三层 fail-closed 隐私防护,以及 /usage 用量视图。
遥测与用量 · 收什么、不收什么、怎么关
一个会读你代码的 agent,收哪些遥测、怎么防泄漏,是信任问题。grok 的遥测(xai-grok-telemetry)在这上面做得相当克制,值得看。
三档模式
TelemetryMode:Disabled(啥都不发,企业默认)、SessionMetrics(只发生命周期元数据、不发内容)、Enabled(完整)。关掉的开关是 DISABLE_TELEMETRY——对标 Claude Code 的 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC。解析优先级(resolve_telemetry_mode):requirement pin > 环境变量(先看 DISABLE_TELEMETRY,再看 GROK_TELEMETRY_ENABLED)> 配置 > 远程设置 > 默认 Disabled。
产品分析双写:自家 events 端点 + Mixpanel。Mixpanel 这一路在 xai-mixpanel 里先脱敏再注入 token:prepare_properties 先对每个属性值跑 redact_json_string_values(用户那些 Bearer 形状的值被抹掉),再塞入项目 token(token 本身不抹)。
内外两套 OTel
- 内部 spans:OTLP 导出到 cli-chat-proxy(默认
<proxy_url>/traces)。这条管道如今拆进了新 cratexai-grok-otel,其中的RefreshableSpanExporter每次 export 都重新取一次credentials.snapshot(),用新 bearer 在预建的阻塞 client(BlockingOtlpClient)上建一次性 exporter。 - 外部 OTEL(企业接自己的 collector):完全独立,从不注册进
opentelemetry::global,导出头只带OTEL_EXPORTER_OTLP_HEADERS(这个模块根本不依赖AuthCredentialProvider,绝无 xAI 凭据),只导出 logs 和 metrics。写作之后还补上了私有 CA 与 mTLS(配置里只写 PEM 路径)。
外部遥测的三层 fail-closed
企业外部遥测的隐私设计是这章的重点——三层 fail-closed:
- 类型化封闭 schema:能发什么由封闭枚举定死;
- 发射期脱敏:秘密 + home 目录路径 scrub、超长截断;
- 导出期校验:
RedactingLogExporter/ValidatingMetricExporter丢弃任何不在 schema 里、或形似秘密的键。
还是双 opt-in(GROK_EXTERNAL_OTEL=1 且配了 exporter),否则零分配、零线程、零 socket。默认内容无关,只有少量计数器和日志事件(比如 grok_code.token.usage,分 input/output/reasoning/cache_read 等)。这里有一处代码跑在了文档前面:user-guide 仍写着「没有 cost.usage 指标,成本自己拿 token 数乘价目表」,而 external/schema.rs 已经加了 grok_code.cost.usage——服务端回报了成本时,按模型累加美元数。
内容门从写作时的两道变成四道(OTEL_LOG_USER_PROMPTS、OTEL_LOG_ASSISTANT_RESPONSES、OTEL_LOG_TOOL_DETAILS、OTEL_LOG_TOOL_CONTENT),默认都关;打开 OTEL_LOG_TOOL_CONTENT 后,工具输入输出和 bash 命令原文(full_command)也会脱敏、截断后导出——写作时「bash 文本永不导出」的说法已不成立。xAI 下发的 fleet 策略对这条流只能收紧、不能放开,所以启动时会先憋住不发,等策略拉到再说(最多等 30 秒)。
「默认最小、层层 fail-closed、内容门逐项显式打开」——这套设计透着对隐私的认真:哪怕企业管理员配错了,三层里任一层也会把不该出去的东西拦下。读一个系统怎么处理遥测,能看出它对用户数据的态度。
/usage 用量视图
/usage(别名 /cost)看用量。信用条(credit_bar)的数据来自 x.ai/billing 扩展(proto 支撑):用量百分比、周期、PAYG 上限……阈值告警(低于 $10 / PAYG 危急 $5)。注意:token 计数(来自采样器)和信用百分比(服务端计费)是分开显示的——一个是你用了多少 token,一个是服务端算的钱。脚本里要数字,可以用写作之后新增的 grok usage <会话 id> [轮次],把会话落盘的 token 与成本按 JSON 打出来。
和《从 LLM 到 Coding Agent》对照
教学最小实现不碰遥测。grok 的增量是一整套克制且分层的遥测:三档模式、内外双管道、外部遥测三层 fail-closed、内容门逐项开关。对照 Claude Code 的用量监控,你会看到同一种「让用户和企业能看清、也能关掉」的取向。下一章是 Part 6 收官:撑起这一切的 Rust 工程底座。