运营室的大屏是全服的心电图:实时在线、开服进度、支付曲线、沙巴克攻城的同屏峰值,12 项核心指标 5 秒一刷。数据看板把散在各处的指标聚成一屏,异常的曲线尖刺在群里截图之前就被值班看见。
---全局定时器 43 号:每 5 秒采集一轮
setontimerex(43, 5)
function Board.collect()
local online = grobalinfo(6)
local now = os.time()
Board.push("online", online, now)
Board.push("peak_today", Board.peakOf("online"), now)
Board.push("maps_active", Board.activeMaps(), now)
Board.push("kick_rate", Board.kickRatio(), now)
end
function Board.push(key, value, at)
Board.series[key] = Board.series[key] or {}
local arr = Board.series[key]
arr[#arr + 1] = { v = value, at = at }
if #arr > 17280 then table.remove(arr, 1) end
end
采集用引擎的 grobalinfo 取实时在线人数,自算当日峰值与掉线率,时间序列按指标分桶存储,单指标保留 17280 个点即 24 小时的 5 秒粒度。环形截断让内存占用有上界,看板跑一周内存曲线依然平直。
---指标快照推给大屏前端,异常即告警
function Board.snapshot()
local snap = {}
for key, arr in pairs(Board.series) do
snap[key] = arr[#arr].v
end
Board.checkAlarm(snap)
return snap
end
function Board.checkAlarm(snap)
if snap.kick_rate > 0.03 then
Board.alert("掉线率超标: " .. snap.kick_rate)
end
if snap.online > 0 and snap.peak_today < snap.online * 0.5 then
Board.alert("在线骤降过半,疑似网络或登录故障")
end
end
快照接口供大屏前端 5 秒轮询,告警检查内嵌在快照生成里:掉线率超 3% 通知值班,在线人数较当日峰值腰斩直接电话叫醒。攻城战期间大屏加开临时指标:沙巴克地图的实时同屏数、参战行会的人数对比,运营据此调度容错与客服资源。看板的历史曲线支持回放,开服首日的容量数据是下次开服的规划依据。
看板自身的采集延迟与推送成功率自监控,采集断流超过 30 秒即告警;指标数值与数据库日终对账,误差要求为零。
时间序列曾经不限长,跑了一个月内存涨到 4 GB,环形截断加上限后回归平稳。grobalinfo 的调用曾经放在多个指标里重复执行,单轮 12 次引擎调用拖慢采集,一轮一次取值后分发给各指标。掉线率的分母曾经用注册总数,人数一涨比率失真,分母改为时段活跃人数。
大屏的指标清单与埋点同源维护,新指标先定义口径再上屏。告警的分级路由:软告警进值班群、硬告警打电话,分级的标准写进值班手册。大屏的访问加内网鉴权,在线与收入数据不进公网。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …
实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…
实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…
实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…
实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…
实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…