目录
Go 1.23 版本的工具链提供一个新工具——telemetry,用于收集 Go 工具链的使用和故障统计数据,以帮助 Go 团队了解工具链的使用情况和运行状态,从而进行改进和优化。
Go telemetry 的目的和工作原理
Go telemetry 的主要目的是收集 Go 工具链使用情况的统计数据,这些数据将有助于 Go 贡献者修复错误、避免退步并做出更好的决策。默认情况下,Go telemetry 数据仅存储在本地计算机上,如果用户启用了上传功能,那么数据的有限子集每周将被发布到 telemetry.go.dev。
Go telemetry 的工作原理基于“计数器”(counters),计数器有两种变体:基本计数器和堆栈计数器。
- 基本计数器:记录特定事件的发生次数,例如 gopls/client:vscode 计数器记录由 VS Code启动的 gopls 会话次数。
- 堆栈计数器:用于跟踪程序执行期间的特定事件序列。
Go telemetry 的配置和命令
Go telemetry 的行为由遥测模式(telemetry mode)控制,有如下三种模式:
- local:收集的数据仅存储在本地计算机上,不会被上传到远程服务器。
- on:收集数据,并根据抽样上传数据。
- off:不收集也不上传数据。
用户可以通过以下命令来查看或修改模式:
- go telemetry:查看当前模式。
- go telemetry on:将模式设置为 on。
- go telemetry off:将模式设置为 off。
- go telemetry local:将模式设置为`local`。
此外,用户也可以通过 Go 环境变量 GOTELEMETRY 和 GOTELEMETRYDIR 了解 Go telemetry 的配置信息。
Telemetry 数据报告
Go telemetry 每周会将统计数据汇总成报告,并保存在 <gotelemetry>/local 文件夹中,文件名会以日期命名,格式为 <date>.json。如果选择了启用 Telemetry 数据上传功能,在每周生成报告的同时,还会额外创建一个报告,其中包含上传配置中指定的一些计数器数据。请注意,这些计数器数据必须经过公共审查和批准的过程。
上传的报告将被存放在 <gotelemetry>/upload 目录下。为了降低数据收集量、增强隐私保护,同时确保统计数据的代表性,当选择上传 Telemetry 数据的用户数量足够多时,系统会随机选择一部分报告不进行上传。这样既减轻了数据收集的负担,也保护了用户隐私。
telemetry.go.dev 是什么
telemetry.go.dev 网站负责接收上传的数据,并将数据对外公开。网站每天会对上传的报告进行处理,生成两种类型的输出:
- 合并报告:将当天收到的所有上传计数器数据合并在一起。
- 图表:根据在提案过程中确定的图表配置,绘制上传的数据。每个图表会将具有相同名称的计数器数据汇总到相应的分类中。
小结
Go 1.23 引入的 Telemetry 功能,不仅提升了 Go 工具链自我完善的能力,也提高了社区的参与度。用户可以通过选择加入 Telemetry 项目直接参与到 Go 语言的发展进程中。通过这种方式,Go 团队能够更准确地掌握工具链的使用情况,从而做出更有针对性的改进。
参考资料
- https://go.dev/blog/gotelemetry
- https://go.dev/doc/telemetry