告警系统的失败方式不是漏报而是狼来了:几百条 P3 噪音把值班群刷屏,真故障的 P0 淹没在里面。监控告警的建设核心是分级与路由——什么级别的指标、在什么时段、推给谁、用多响的方式,四件事定清楚告警系统才有人信。
---告警分级:P0 电话、P1 群@、P2 群消息
local LEVELS = {
P0 = { via = "phone", recover = 5 },
P1 = { via = "at", recover = 30 },
P2 = { via = "msg", recover = 0 },
}
function Alert.fire(level, key, detail)
local cfg = LEVELS[level]
if not cfg then return end
Alert.push(cfg.via, level, key, detail)
Alert.record(key, level, os.time())
end
---分级示例
Alert.fire("P0", "login_fail_spike", "登录失败率 40%,持续 3 分钟")
Alert.fire("P1", "slave_lag", "从库延迟 4 秒")
Alert.fire("P2", "disk_70", "磁盘使用率 72%")
三级分档:P0 是玩家大面积受影响(登录失败率飙升、全服掉线),电话叫醒;P1 是局部受损(从库延迟、单地图异常),群内点名值班;P2 是趋势预警(磁盘 70%、内存涨势),群消息即可。分级的标准写进值班手册,新指标的定级由值班评审而不是开发者拍脑袋。
---路由:按时段找人,深夜升级
setontimerex(45, 60)
function Alert.route()
local hour = tonumber(os.date("%H"))
for _, a in ipairs(Alert.pending) do
if a.level == "P0" or (hour >= 22 or hour < 8) and a.level == "P1" then
Alert.toOnCall(a) -- 深夜 P1 升级为呼叫
else
Alert.toGroup(a)
end
end
Alert.pending = {}
end
路由按时段分流:白天的 P1 进值班群,22 点后的 P1 升级为电话——深夜的群消息等于没人看。同一指标的重复告警做静默窗口:5 分钟内同键告警只发首条,风暴式的刷屏被抑制。告警的恢复通知与触发通知同等重要,值班的完整循环是"收到—处理—收到恢复",缺恢复通知的告警系统等于让值班永远悬着心。
告警系统自身的可达性月演:人为注入 P0 演练电话链路;误报率与平均响应时长双指标周报,误报率超过 20% 的规则回炉。
磁盘告警曾经按固定阈值 80%,大版本上传时段天天误报,阈值改动态基线后安静。告警的路由表曾经写死个人手机号,人员变动后 P0 打给离职员工,路由表进配置加季度校对。静默窗口曾经一刀切 30 分钟,故障恢复了恢复通知也被吞,静默只作用于触发通知不作用于恢复通知。
每个 P0 告警附一条处置手册链接,深夜被叫醒的人需要的是手册不是谜语。告警的月度复盘制度:每条 P0 回顾响应时长与误报可能,告警规则的生命周期管理与代码同等对待。演练常态化,电话链路半年不演必然掉链。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …
实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…
实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…
实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…
实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…
实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…