数据流向:隐私数据与非隐私数据隔离
还是在你的餐厅里,每笔点单会同时打出两张单:一张贴在前台大屏上(菜名 + 桌号,所有服务员都能看);另一张进入会员系统后台(完整记录,含会员手机号,只有运营专员有权限)。
Claude Code 的每条事件也会同时发往两个目的地,区别就在于哪张"单"包含个人信息。从代码上看,src/services/analytics/sink.ts 把每个事件路由给两个后端:
// src/services/analytics/sink.ts
function logEventImpl(eventName: string, metadata: LogEventMetadata): void {
const sampleResult = shouldSampleEvent(eventName)
if (sampleResult === 0) return // 采样:这条事件被抽中"不记录",直接丢弃
if (shouldTrackDatadog()) {
// Datadog 是通用访问后端,去掉 _PROTO_* 字段
void trackDatadogEvent(eventName, stripProtoFields(metadataWithSampleRate))
}
// 1P(第一方)接收完整 payload,包含 _PROTO_* 字段
logEventTo1P(eventName, metadataWithSampleRate)
}
| 后端 | 接收数据 | 访问控制 | 用途 |
|---|---|---|---|
| Datadog | 去掉个人标识后的版本(去掉 _PROTO_* 字段) | 团队通用,所有工程师都能看 | 实时监控、报警、大盘 |
| 1P(第一方) | 完整数据,含个人标识(_PROTO_* 字段) | 有权限控制的 BigQuery 专属列 | 带用户标识的深度分析 |
_PROTO_* 是字段名前缀约定,用于标记含有 PII(个人身份信息,Personally Identifiable Information)的字段——比如用户邮件、账号 UUID。加了这个前缀,代码就知道"这个字段只能给有权限的系统,不能进 Datadog"。