后端挂掉的时候页面显示的是 404 找不到页面,监控按状态码统计,5xx 一直是零,故障过了半小时才被发现。日志里能对上时间点,这种反而好排。

error_page 把 502 和 504 一起指到了 404 页面,原始状态码被改写掉,错误分类和告警阈值跟着一起失真,等于自己把眼睛蒙上,故障根本报不出来。这一点先确认清楚,后面就不用反复试。

error_page 502 503 504 /50x.html;
location = /50x.html {
    internal;
}

这次卡住的地方就在「error_page 状态码映射」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:把 502、503、504 这三个状态码单独指到一个专门的 5xx 错误页上面;错误页内部要保留原始状态码,不要一律都写成 404;监控那边给 5xx 单独建一条告警,别只盯着 4xx 的比例看。

结果对不对很好判断,停掉后端再访问返回 502,告警能按预期触发并通知到值班的人。

作者 9823189