运营室的大屏是全服的心电图:实时在线、开服进度、支付曲线、沙巴克攻城的同屏峰值,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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 战士的烈火剑法一击熄火后要等八秒冷却,连招断档感强烈。疾风烈火斩在烈火剑法命中后给一次连击窗口:三秒内再…
实战应用:用在哪里 阵营对抗打到中期容易疲软:打赢没有额外好处,输掉也没有代价。阵营声望体系给阵营战装上荣誉刻度:个人与阵营…
实战应用:用在哪里 拿下沙巴克之后呢?城主除了名字挂在城墙上,对城市毫无影响。城主施政玩法让占领变成治理:城主每周获得市政令…
实战应用:用在哪里 主线路光缆被挖断的深夜,全服掉线 20 分钟,玩家以为游戏倒闭。备用线路方案给接入层配第二条出口:主线路…
实战应用:用在哪里 行会官员由帮主任命的老模式弊端明显:任人唯亲、能上不能下。行会选举接口把官员换届做成投票制:每两个月一次…
实战应用:用在哪里 烈火剑法的伤害加成、冷却时间、下一级提升,全靠玩家记忆或去官网查。技能说明悬浮卡片在鼠标悬停技能图标零点…