问题出现得很突然,日志倒是留得挺全。巡检任务定在晚上八点,每天固定报十二条请求超时,第二天手动访问都正常。值班的人看了两周,开始直接忽略这封邮件。

刚开始盯着「巡检并发开到五十,自己把源站压出 503」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。巡检时间和业务高峰撞在一起,量到的是拥塞不是故障。也可能是超时阈值设成两秒,正常偏慢的页面也被判失败。

还有一种情况,失败不重试,一次抖动就记成一条故障。

先把巡检挪到低谷并加一次重试

0 4 * * * /opt/check.sh --retry 1 --timeout 8

接着对照误报时段的 QPS 与响应时间

awk '{print $4, $request_time}' access.log | grep '20:0' | head

并发降到 5 并让慢页串行执行

等前面都确认过,再按最近三十天的真实分布重设阈值

改完先别撤,确认这几项。误报从每天十二条降到每周一两条,值班邮件重新被打开,真实故障的发现时间没有变慢。

这里还有个坑。巡检失败率高时先怀疑巡检自己,它也是流量,在高峰测出来的数字没有参考价值。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189