Go 工具链详解(八):go telemetry
目录
Go telemetry 的目的和工作原理
Go telemetry 的配置和命令
Telemetry 数据报告
telemetry.go.dev 是什么
小结
参考资料
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