summary
2019-11-06,Honeycomb 的一路服务因内存使用持续爬升而未被及时察觉,最终内存耗尽(OOM),进程被杀死,进而使其所在的 ingest 管线(接收与处理遥测数据的链路)中断。由于该组件是数据处理的关键环节,中断造成部分客户遥测在窗口内无法被接收/查询,恢复后需补数据。
timeline
内存缓慢增长未被告警;某组件 OOM 后被重启,但重启未能立即承接流量,管线出现空洞。团队发现监控缺口(根本没有对该内存指标的告警),补上告警并扩容/优化后恢复。
root_cause
对一个关键服务的内存指标缺乏告警,内存爬升至耗尽才被发现;该服务又是 ingest 管线的单点,OOM 直接转化为管线中断。
amplifiers
① 监控盲区:对该组件内存无告警,耗尽才暴露。② 单点管线:一个组件 OOM 即断整条链路。③ 无自动扩容/重启承接:恢复慢。④ 数据窗口丢失:中断期间遥测不可达。
mitigation
补上内存告警并优化/扩容该服务;对 ingest 管线增加冗余与重启承接能力,减少数据丢失窗口。
lessons
所有关键服务的资源指标必须有告警与趋势预测;管线组件应冗余且无单点;OOM 前应有提前扩容或驱逐;遥测入口需有缓冲以防中断丢数据。
checklist
① 关键服务内存/CPU 指标加告警与趋势预测。② ingest 管线去单点冗余。③ 进程 OOM 前自动扩容/驱逐。④ 入口增加缓冲降低丢失窗口。