运营的每日一问——昨天多少人在线、收了多少、流失了多少——曾经靠人肉拉库跑查询。自动化报表把日周月三级的指标定时生成、定时投递:凌晨 00:05 日报进运营邮箱,周一上午周报、每月首日月报按同一管道出去,人只看结论不跑数据。
---全局定时器 40 号:每分钟检查报表时刻
setontimerex(40, 60)
function Report.tick()
local hm = os.date("%H%M")
if hm ~= "0005" or Report.doneToday() then return end
Report.markToday()
local rows = Report.collectDaily()
local body = Report.render(rows)
sendmail("运营组", 8001, "每日运营报表 " .. os.date("%Y-%m-%d"), body, "")
end
全局定时器每分钟对表:跨过 00:05 的门槛且当日未生成则触发生成,markToday 的幂等标志防止重复投递。日报的核心指标一屏十行:日活跃、峰值在线(grobalinfo 取实时在线的快照历史)、新增、次留、充值与 ARPU、流出金币与装备产出,每行带前一日对比。
---日报数据落表,周月报从日报聚合
function Report.weekly()
local days = {}
for i = 1, 7 do
days[i] = Report.loadDaily(os.time() - i * 86400)
end
local sum = Report.aggregate(days)
sendmail("运营组", 8002, "周运营报表", Report.render(sum), "")
end
周报与月报不复算原始数据:日报落库后,周报聚合 7 天、月报聚合当月日报,口径天然一致。同比与环比双列:本周比上周、本周比四周均值,异常的斜率自己跳出来。报表的指标定义集中在一个字典文件,活跃的定义、留存的口径写死一处,三个报表引用同一份字典,口径打架的争论就此绝迹。
报表任务的成功与耗时监控,生成超过 5 分钟即告警;指标的抽样人工复核每周一次,机器算数与人工抽查的偏差必须为零。
幂等标志曾经存内存,进程重启后日报发两遍,标志落库后修复。跨天定时器曾经在 00:00 整点抢跑,当日的实时数据还没切日,生成时刻移到 00:05 错开切换窗口。月报的聚合曾经把 31 号的日报漏掉,按日遍历的边界写成了 30,日期边界改为按月首末取值。
报表的收件人清单进配置,运营、发行、开发各取所需分渠道投递。指标的字典文件与埋点文档同源维护,新增指标先定义后采集。月报附一个月的异常事件时间轴:回档、封禁批量、支付波动标在同一根时间轴上,数据的异常与事件对得上才算看懂了报表。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …
实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…
实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…
实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…
实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…
实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…