案例库 · 软件与 IT · 技术决策 · 2011
Etsy 的 StatsD 让添加指标免费:一行 UDP,分桶聚合
Etsy 2011 年的 StatsD 守护进程接收一行 UDP 计数器和计时器,按 10 秒桶聚合,让测量任何东西都变成一行代码的改动。
Etsy
那一手
Etsy 每天部署代码几十次,需要知道代码在做什么。它没有提前规划一个配置管理的指标系统,而是让测量变得极其简单:任何工程师都能在半小时内把任何能计数或计时的东西变成图表。这个工具就是 StatsD,一个刻意保持简单的 Node.js 守护进程,随 2011 年的博文“测量一切,测量所有”发布。
设计选择是 UDP 加服务端聚合。客户端发送一条简短的纯文本消息——计数器、计时器或仪表——然后就不再关心:“要么 StatsD 收到数据,要么没收到。应用不在乎 StatsD 是正常、宕机还是着火。”守护进程把事件按时间桶累加,每 10 秒把聚合结果刷到 Graphite,所以指标接近实时,新指标无需配置即可出现。
对于非常频繁的事件,增加了采样:只发送一部分数据包,让 StatsD 在刷出之前把数字放大回 100% 的估算值。协议保持如此简洁,以至于这个想法在公司间传播开来,这个开源守护进程成为大量兼容实现生态的基础。
为什么管用
- 即发即忘的 UDP 意味着埋点永远不会拖慢请求或拖垮网站。
- 聚合在一个守护进程中完成,存储拿到的是汇总值,而不是数百万个数据包。
- 新指标无需配置即可出现在 Graphite 中——只需一行代码。
- 采样让高频事件可测量,而不会淹没网络。
值了多少每个指标一条 UDP 行;服务端聚合聪明
可以搬走什么
把测量的成本降到一行代码,人们就会测量一切;把昂贵的聚合推到后台守护进程中,应用就永远不必为自己的可观测性买单。
后来呢
StatsD 成为被复制最多的监控基础设施之一:大多数语言都有客户端库,兼容的服务器和代理是标配,它的文本协议影响了后来的指标生态。Etsy 的工程故事仍然是“让可观测性便宜到团队真的会用”的经典范例。
资料来源
发现哪里写错了?告诉我们。