返回博客
·9 分钟阅读·productdevbook

在 macOS 上搭建个人带宽仪表盘

在 macOS 上搭建个人带宽仪表盘的实用方案——追踪什么、忽略什么,以及如何全程保持本地化。

  • macOS
  • Bandwidth
  • Productivity
  • Tutorial

每六个月就有人在 Hacker News 上发"我用 Prometheus 和 Grafana 搭了个个人监控栈"。漂亮、周六搭着好玩、对实际问题极度过度——我 Mac 上每个应用用了多少带宽?你不需要 TSDB、Docker compose 文件、或带 TLS 的反向代理。你需要一个能放在一个屏幕上、住在菜单栏里、不挡道的 macOS 带宽面板。这里教你怎么不烧周末就搭出来。

主旨:菜单栏应用处理实时和近期层,偶尔 CSV 导出处理归档分析,搞定。没有要照顾的服务、没有要编辑的 scrape 配置、没有要维护的面板。

Mac 用户实际需要什么样的带宽面板

剥掉 Grafana 幻想,问你实际会看什么:

  1. 当前速率。 "现在有没有东西在用带宽?"——最常见问题,一天问几十次。
  2. 按应用分解。 当答案是"有",你想知道是哪个应用。
  3. 近期历史。 上一小时、上一天,可能上一周。够发现规律。
  4. 偶尔深潜。 每月一次你想比较这月与上月,或与别的东西关联。

就这样。整个产品就这些。多数"个人监控"栈带几十个面板,因为工具鼓励它。你不需要它们。

双层设计

把问题拆成实时/近期层和归档层。

实时 + 近期:菜单栏应用

菜单栏应用是头三个需求的合适形态。它一直在跑,离你当前活动一键之遥,你不看它时不占屏幕空间。菜单栏图标的信息密度——当前速率作为小图或两个数字——正是"现在有没有东西在用带宽"想要的。

挑一个有以下属性的就齐活:

  • 在菜单栏一眼显示实时速率
  • 有弹出框或窗口带按应用分解
  • 把辅助进程归并到父应用下(所以 "Slack" 是一行不是七行)
  • 至少保留一天历史,理想一周或更多
  • 已签名公证,所以 macOS 不会拦它

ova 上面这些都有。约 3 MB,约 1 Hz 采样,运行于 macOS 14 及以上(Apple Silicon 和 Intel),数据本地,无遥测。

菜单栏里的实时 + 历史
ova 在你菜单栏显示当前速率,背后是可拖动的按应用时间线。这覆盖一个带宽面板的实时和近期层,安装之外没有别的设置。

归档:偶尔 CSV 导出

对每月一次的"比这月与上月"问题,你不需要实时系统。你需要一个扁平文件。从你带宽监控导出 CSV,扔进笔记本(Jupyter、Observable 之类),跑查询。

这也是做有趣分析的地方:按小时热图、按应用前几大目的地、周对比增长。你不需要它实时——一个月跑一次没事——你的笔电不需要托管 Grafana 实例就能做。

如果你的监控把数据存在 SQLite(ova 是这样,存在 ~/Library/Application Support/ova/),导出一条命令:

sqlite3 -header -csv \
  ~/Library/Application\ Support/ova/<file>.sqlite \
  "SELECT timestamp, app, bytes_in, bytes_out FROM samples" \
  > ~/Desktop/bandwidth.csv

然后在 Python 或 R 或 DuckDB 里加载,你就有了 Grafana 栈的重活层,一条查询零基础设施。

为什么不用 Grafana?

Grafana、Prometheus、InfluxDB、Loki——它们对舰队是好工具。对一台 Mac,运维开销与之极度不成比例。你需要:

  • 一个本地跑的 Prometheus 实例(内存、磁盘、端口)
  • 一个读 proc_pidinfonettop 输出的自定义 exporter(要有人写有人维护)
  • 本地跑的 Grafana(Java/Go 进程、端口、数据库)
  • 要写要版本化的面板
  • 要定期登面板的理由(你不会)

最初周六下午的兴奋之后,栈烂掉。你升级 macOS,exporter 坏了。Grafana 让你重置密码。你三周忘了它,错过了你建它就为之的反常。

菜单栏应用让开你的路。你每次瞄时钟都看到速率。Mac 带宽面板工作流是嵌进你日常的,不是一个你得记得去访问的网站。

一步步搭

具体讲,这里是 15 分钟内把面板拼起来的方法。

第 1 步:装菜单栏应用

ova。约 3 MB。拖到 Applications,启动,允许它请求的读网络统计的权限,搞定。它立刻开始约 1 Hz 采样并在菜单栏显示当前速率。

第 2 步:配置菜单栏显示

多数菜单栏带宽工具让你选显示什么。常见选项:

  • 当前上/下速率(例如 ↓ 2.1 MB/s ↑ 80 KB/s
  • 上一分钟的小 sparkline
  • 仅一个有活动时亮起的图标

挑一个。两个数字显示信息密度最高。sparkline 最"一眼可瞄"。没有错答案;挑你会真的去读的。

第 3 步:钉几个应用

一些监控让你把某些应用标为"被关注"——它们在分解视图里排在前面。多数人有用的钉:

  • 你住的浏览器(Chrome、Safari、Arc、Firefox)
  • 你工作聊天(Slack、Discord、Teams)
  • 你的开发工具(Docker、VS Code、做移动开发的话还有模拟器)
  • 云同步(Dropbox、iCloud 的 cloudd、Google Drive)

一周内你就知道哪些你实际想钉、哪些你当时太乐观。

第 4 步:验证历史能用

近期层的全部意义是能拖回去。打开弹出框或窗口,挑一个时间范围如"过去 24 小时",确认你看到一张有峰有谷的图。如果没有,应用没在持久化数据,你拿到的是一个高级 nettop。换个工具。

第 5 步:日历每月导出

加一个日历提醒到每月 1 号:"导出带宽数据、跑热图笔记本。"每月五分钟。那是你的归档层。

看什么

面板跑起来后,下面是按一定节奏值得检查的问题。

每日一瞄

打开分解视图。扫意外。Chrome 在顶上,正常。cloudd 在工作时间排顶,问为什么(多半是 iCloud 在追账,可能是照片在上传)。你不认识的东西在顶,去查。

每周

看每日合计。一致吗?某天 5 倍尖峰意味着要么你做了不一样的事(下载了游戏、开了大会),要么有自动的东西跑了(到远程目标的 Time Machine、系统更新)。

每月

跑热图。月度按应用前列。与上月比。趋势告诉你带宽是不是在悄悄上升——通常因为某个新应用你忘了质疑。

看 ova 实战

一眼可瞄的菜单栏带宽监控——本地、签名、约 3 MB。

下载 macOS 版

一个走完的例子

一个用户设置的真实规律:

  • 实时速率:菜单栏里小 sparkline。瞄一眼花零时间。
  • 按应用视图:绑到一个热键打开 ova 弹出框。
  • 每周检查:每周五下午,用户打开 7 天视图记下前三应用。前三里跟上周五不一样的,给一句话写进日记解释为什么。
  • 每月导出:launchd 任务每月 1 号 dump 一个 CSV。一个小 Observable 笔记本绘热图和按应用前 10 名。总时间:每月 90 秒一次。

整个系统就是这。没有 Prometheus、没有 Grafana、没有反向代理、没有认证、没有端口、没有要轮转的日志。"面板"是菜单栏加每月一次打开的笔记本。

你确实需要服务器的时候

集中栈对的情况:

  • 你管多台 Mac(小团队、家庭、构建机器舰队)
  • 你想跟非 Mac 数据关联(路由器日志、智能家居流量、工作 VPN 用量)
  • 你有实时告警需求("上传超过 100 MB/s 连续五分钟以上呼我")

那些情况下运维成本正当。一台个人 Mac 上不正当。

收尾

Mac 用户实际会打开的带宽面板不需要栈。它需要一个永远显示当前速率的菜单栏应用、一个有东西看起来不对时的按应用分解、和一个少数深潜的导出路径。整件事就这。

要简单版,装 ova——约 3 MB,macOS 14 及以上,约 1 Hz 采样,所有数据留在你机器的 ~/Library/Application Support/ova/,无需账号,一次性付费加终身更新加 14 天退款。从下载到面板五分钟,看不见 compose 文件。