运营室的大屏是全服的心电图:实时在线、开服进度、支付曲线、沙巴克攻城的同屏峰值,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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…