2026年10月11日早上6点40分,一条critical级别的告警弹了出来,指向每天发往B2的restic远程备份任务。告警文本只有一句话:任务以"failed"状态结束,附带一个细节——"exit at line 92"。
这就是全部信息。没有restic的报错原文,没有仓库是否可达的判断,也没有脚本前半段是否出过岔子的线索。一个行号只告诉你脚本停在哪,不告诉你为什么停。
这个任务的调度链路并不复杂:systemd timer orqestra-backup.timer 每天05:30触发,调用VPS上的脚本 /opt/orqestra/scripts/backup-db.sh。告警倒是给了两个排查入口——查orqestra-backup单元的journal,或者直接去看那台VPS上的脚本。
问题在于,它把"去看日志"当成了结论。告警本身没有尝试概括restic的输出,而是把找答案的活儿原样甩回给人。凌晨六点四十收到这么一条,能做的只有登机器、翻journal、对着第92行上下文猜。
从工程角度看,这条告警的失效点很清晰:
- 状态词"failed"只说明非零退出,不区分是restic自身报错、B2仓库连不上,还是脚本更早的步骤已经出问题;
- 行号是脚本执行位置,不是失败原因,两者之间没有映射关系;
- restic自己的错误输出没有被捕获进告警,而它恰恰是唯一能直接说明问题的东西。
换句话说,告警把可行动的信息留在了journal里,只把"出事了"这三个字推到了手机上。值班的人还得再走一遍它本该替你走完的路。
这条记录给出的建议很直接:当restic任务由systemd timer下的脚本拉起时,让告警携带restic自身的错误输出。一个行号加一个状态词,不足以支撑任何处置动作。
对写监控的人来说,这算是个典型反例——告警的价值不在于通知你失败了,而在于让你不用打开终端就知道大概该修哪儿。做不到这一点,它和定时给你发一句"去看看日志"没有区别。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.