巡检脚本只判断 HTTP 200 数据库连不上时应用输出了友好错误页 状态码仍是 200 页面标题是系统繁忙 连续三天巡检全绿 实际文章页打开全是错误提示
一开始怀疑是「错误页与正常页模板相似 肉眼也难分辨」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。应用捕获异常后返回 200 加错误文案。少数情况下是巡检只校验状态码 不校验内容。
另外,没有对关键文案做反向断言。
第一件事是确认错误页的状态码
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/p/123
巡检加关键词反向断言
python check.py --reject '系统繁忙|数据库连接失败'
接着让应用在异常时返回 503
header('HTTP/1.1 503 Service Unavailable');
复验异常场景下的绕行处理
curl -s https://www.example.com/p/123 | grep -c '系统繁忙'
别只看报错消失,验证要多做一步。错误页返回 503 巡检能识别并告警 状态码与真实可用性一致。
这里还有个坑。200 只说明服务器回了话 不代表回的是对的 巡检要看到内容才算真的看过。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
