对账任务从周三开始每次都失败,到周五才被发现,中间累计 17 次,worker 进程一直活着,监控全是绿的。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,监控项只有进程存活和队列长度,任务失败只写日志不产生指标。失败次数没有聚合,也就没有阈值可触发。

「任务失败告警」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。改完顺手把文档补一句,省得下次自己重新推一遍。

rate(task_failed_total[5m]) / rate(task_total[5m]) > 0.3
# for: 10m
# labels: task="reconcile"

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,给每个任务打成功和失败的计数器指标;按任务名算 5 分钟失败率 连续 3 次失败就告警;告警里带上最后一次异常和 task_id;确认告警能真的发出去 别只配在面板上。

最后用这个标准收尾,人为让任务抛异常 3 次 10 分钟内收到告警 内容里能看到任务名和异常摘要。

作者 9823189