CLI

CLI 遥测

evlog CLI 会收集哪些关于自身使用情况的数据、如何查看这些数据,以及关闭它的三种方式——DO_NOT_TRACK、EVLOG_TELEMETRY=0,或 evlog telemetry disable。

evlog CLI 每次运行都会记录一条匿名的宽事件,因此我们知道人们使用了哪些命令,以及哪些命令出错。它使用的正是 evlog 为你自己的 CLI 提供的同一套遥测工具包,只是把它指向了自身。

本页讲的是 CLI 自身的遥测。如果你正在为正在构建的 CLI 配置仪表,你需要的是遥测。 :::

init 记录了什么

evlog init 比其他命令询问更多问题,因此它会记录这些问题的答案,从而让流程优先展示人们实际选择的选项,并舍弃无人选择的选项。
记录内容示例
框架、开发环境数据出口、采样预设nuxtfsbalanced
每个目标位置的一个标志、所选的额外项和增强器initProdAxiom: true
计数写入的文件数、剩余的手动步骤、doctor 失败次数
某个提议后面是否有实际内容initHadRepeatedErrors: true
每个字符串都是 CLI 自有目录中的一个 ID,并且在发送前会根据允许列表进行检查;未声明的值会被丢弃,而不会被传输。绝不会记录你的服务名称,也不会记录包名称、路径或从源代码中读取的任何内容。最后一行只表示扫描是否发现了某些内容,绝不会表示发现了什么。

map 记录的内容

evlog map 记录扫描的形态:分数及其等级、入口点的数量,以及其中有多少是已检测覆盖、部分覆盖、暗黑或豁免的,检测到的是哪个框架,以及 --min-score--baseline 门禁是否导致运行失败。
记录内容示例
分数和等级mapScore: 72, mapGrade: good
按覆盖情况统计的入口点数量mapEntryPoints: 34, mapDark: 9
按类型统计:入口点和暗黑入口点mapKindPage: 12, mapDarkPage: 3
按敏感性统计:资金 / 身份验证 / PII 入口点及暗黑入口点mapSensitiveMoney: 2, mapDarkMoney: 1
按规则统计:未通过规则的入口点数量,以及豁免该规则的入口点数量mapFailWideEvent: 6, mapSuppressedWideEvent: 2
运行了哪个门禁,以及是否失败mapGate: baseline, mapGateFailed: true
规则 ID 是 CLI 自有的固定集合,且已经公开。从源代码中读取的所有内容都是计数:没有路由路径、没有文件名、没有项目名称、没有代码片段。类型同样是 CLI 自有的封闭集合;项目中不存在的类型会被省略,而不是以零值发送,这与保持默认值的标志不会被记录的约定相同。对于项目中存在但已完全覆盖的类型,其暗黑计数为 0,因此 mapKindPage: 12, mapDarkPage: 3 始终表示“12 个页面,其中 3 个是暗黑的”,绝不会表示缺少某个数字。敏感性是启发式分类(依据导入内容和路径术语,参见报告中的 $ / A / o 标记),因此按敏感性统计的数量是分类器发现情况的估计值,并非绝对事实。

查看收集的内容

Terminal
evlog telemetry status
该命令会输出遥测是否开启、数据目录的位置,以及完整的披露表:每个字段、其类型及其用途。披露信息由发送事件的代码生成,因此不会与实际通过网络发送的内容产生偏差。
Output
Telemetry: enabled (preference: enabled)
Data directory: ~/.config/evlog-cli/telemetry

事件中包含什么

每次运行记录一条事件,其中包含命令名称、耗时、是否成功,以及在失败时的错误码。除此之外,还会记录:Node 版本、操作系统和架构、运行是否在 CI 中以及使用的是哪个提供商、stdout 是否为 TTY,以及是否由 AI 编码代理驱动。标志会按照你实际传入的内容进行记录。布尔值和数字会保留其值;字符串值会被记录为 <set>,而不是记录其内容,除非该标志明确列入允许列表。位置参数完全不会被记录,保留默认值的标志也不会被记录,因此单独运行 evlog map 时会发送一个空的 flags 对象。机器 ID 是哈希值,在临时 CI 环境中会被完全省略。
不包含文件路径、源代码、项目名称、路由路径或参数值。

关闭它

以下任一方式都足够:
Terminal
# 持久化偏好
evlog telemetry disable

# 单次运行,或在 shell 配置文件中
EVLOG_TELEMETRY=0 evlog map

# 跨工具标准,在任何地方都受支持
export DO_NOT_TRACK=1
evlog telemetry disable 还会清除任何已排队但尚未发送的内容。evlog telemetry enable 会将其重新开启。

在信任之前先检查

要精确查看一次运行将会发送什么,而不实际发送它:
Terminal
EVLOG_TELEMETRY_DEBUG=1 evlog map
拟发送的负载会打印到标准错误输出。

命令

命令作用
evlog telemetry status当前状态、数据目录以及完整披露信息
evlog telemetry enable启用匿名使用遥测
evlog telemetry disable禁用并清除未发送的数据