☰
Brew 数据分析:你的每条 brew install 都去了哪里?
2026/10/18 21:27:04 网站建设 项目流程

Brew 数据分析:你的每条 brew install 都去了哪里?

【免费下载链接】brew🍺 The Package Manager for Everywhere项目地址: https://gitcode.com/GitHub_Trending/br/brew

Homebrew(brew)不只帮你装软件,还会匿名记录每次安装与命令执行,并沉淀为可查询的统计。本文按数据流动的路径讲清这套 Brew 数据分析系统:从哪来、存到哪、怎么查、怎么展示,最后给出可立即上手的开关命令。

先想清楚问题:维护者真正想知道什么

假设你维护一个 formula,有人报告安装失败,你的第一反应可能是「这问题影响面有多大?有多少人和我用同一平台?」再往前一步:哪些包安装量最大、哪些 macOS 版本用户最多、哪些平台组合几乎没人用?这些问题的答案直接决定你优先修哪个 bug、优先支持哪个架构。

Brew 把「匿名聚合统计」内置进工具链本身,意味着你不用自己搭埋点,也不用申请外部平台账号,数据管道已经跑在每次brew install之后。

数据流动:一条安装事件的四站旅程

第一站·采集:命令一执行就埋点

你敲下brew install的瞬间,Library/Homebrew/utils/analytics.rb 里的report_package_event会构造一条事件:包名、tap 名、安装选项、是否用户主动请求(而非依赖安装)、操作系统、架构、Brew 版本号等。设计上有几个值得注意的细节:

  • 选项的值会被剥掉只留名称,降低隐私风险
  • 非常见前缀统一记为custom-prefix,不暴露你的目录结构
  • 载荷里没有用户标识和 IP 字段,服务器端无法还原单个用户的行为史

发送本身跑在后台分离进程里,超时 3 秒、失败完全静默——统计绝不会拖慢你的正常操作。构建失败同样会触发build_error事件,但只记包名和选项,不含日志与堆栈。

第二站·存储:InfluxDB 保存一年

所有事件写入 InfluxDB 的analyticsbucket(见Utils::Analytics中的INFLUX_BUCKET/INFLUX_HOST常量)。官方文档 docs/Analytics.md 明确事件保留 365 天:再久的历史无法回查,但一年内任意时间窗口的聚合都可行。

第三站·查询:两条查询通道

普通用户走公开 JSON API:Library/Homebrew/api/analytics.rb 只需按analytics/<分类>/<天数>d.json的规律拉取现成文件,无需任何凭证。

维护者走直查通道:brew formula-analytics命令(源码在 Library/Homebrew/dev-cmd/formula-analytics.rb)会现场拼出 InfluxQL 语句,交给 Library/Homebrew/formula-analytics/influxdb-query.py 执行。它要求你安装uv并设置HOMEBREW_INFLUXDB_TOKEN,能按 30/90/365 天窗口查安装、构建错误、命令执行、测试机器人结果等十几个维度。

brew formula-analytics --build-error --days-ago=30 --json

第四站·展示:终端表格与排行榜

查询结果最终落在table_output方法(仍在 utils/analytics.rb):四列的终端表格——序号、名称(含选项)、计数、百分比,并按计数降序排好名次。你在brew info <formula>里看到的安装统计、以及公式站 analytics 页面上的排行,都是这份 JSON 的两种渲染。维护者侧的 Library/Homebrew/dev-cmd/generate-analytics-api.rb 则定时把 InfluxDB 里的聚合结果批量生成为这些公开 JSON 文件,整条「InfluxDB 采集 → JSON → 页面」的链路由此闭合。

配置与开关:30 秒控制你的数据

开关只有三个子命令,逻辑在 Library/Homebrew/analytics/subcommand/:

brew analytics state # 查看当前状态 brew analytics on # 启用 brew analytics off # 永久禁用(同时清掉本地 UUID)

想临时静默某一次运行,设HOMEBREW_NO_ANALYTICS=1即可;想亲眼看看要发送什么,设HOMEBREW_ANALYTICS_DEBUG=1再跑一条命令,请求体会被完整打印出来。

进阶用法:用测试机器人数据定位构建失败 🛠️

把「构建错误事件」和「测试机器人步骤事件」放在一起看,是维护者视角最有价值的组合。brew test-bot的每个步骤(audit、install、linkage、style、test)结果都会以test_bot_test事件上报,带操作系统、架构和通过/失败标签;Library/Homebrew/test_bot/ 是这部分流程的入口。

当 PR 上某个步骤大面积变红时:

你可以先查--build-error事件确认是「上游代码坏了」还是「某平台编译器/依赖变了」,再结合brew info --analytics看该包 30 天安装量——安装量大且集中在某个失败平台,就该优先修;冷门组合则可以降级处理。这一步等于把「修哪个 bug 收益最大」从拍脑袋变成了查表。

结语

Brew 数据分析把埋点、存储、查询、展示都收敛在一个仓库里,普通用户只需知道一个开关,维护者则能直查全年数据。下一步建议:打开终端运行brew analytics state,再挑一个你常装的包执行brew info <名称> --analytics,亲眼看看它的真实热度。🚀

【免费下载链接】brew🍺 The Package Manager for Everywhere项目地址: https://gitcode.com/GitHub_Trending/br/brew

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询