页游日志分析的流程

新的工作已经有快5个月了,有必要记录一下这个工作内容是哪些。

这是一份通过PHP程序对日志数据进行解析与分析得到结果协助运营人员的分析工作。

程序数据分析cms系统的目标用户(使用者)是公司内部运营人员以及合作方的游戏运营人员。程序本身而言与我之前的工作还是有很多不同的,没有市场调研部门,没有运营部门,没有设计部门,只有自己程序开发部,连前端也没用,有一位游戏p图的。程序两人完成所有工作需求。简而言之对比以前得到的资源是少之又少,工作性质也是枯燥无味居多。

工作流程是,游戏中写文本日志到服务器本地→(应该是通过文件同步系统同步到分析服务器)→PHP程序每小时运行一次解析分析日志→存入Mysql→PHP后台cms读取Mysql数据→运营人员使用查看。

完整的步骤就是这样

架构

网页游戏中有很多动作,比如购买,比如抽奖,比如参加活动,比如是否消费,消费了多少金币元宝,消费的数量等等。而游戏中主要统计的数据就是用户相关的留存率,用户活跃度,新增用户数,每天用户登录次数等等;还有充值相关的充值详细记录,各服充值简表,活跃用户平均收入(ARUP),充值用户平均收入(ARUUP),当天充值总额等等;还有道具活动相关的,道具消耗度,活动的参与人数消费数据等等,其中几乎每个需求中需要到的几项数据统计包括,时间服务器ID人数次数消费额度消耗数量消费占当天总额占比 ,而这些数据都从游戏日志里面来得到,比如玩家登陆的动作,对应的是这样一条日志

23:01:02 | 18140 |RoleLogin | 0C429E0A73EA0C20A85CD3B1E03A1C81 | 67_201308291943399606777822 | 请深坑 | 31 | 35091 | 27794000 | 29200000 | 13688000 | 0 | 1050 | 0 | 0 | null | 50 | 4 | 127.0.0.1 | 0 | 0

其中比如登陆人数,登陆次数,登陆时段等等统计都可以从这里得到。

那么程序需要做的是把这些日志都存入数据库,通常意义来说一条日志对应的是一个数据表,但是有时候相近的日志可以放在一个表中。解析日志存放数据完成后就开始进行需求的检索分析(比如统计人数,次数,消耗数量等),完成后既写入一个统计信息的表里面,这样做的意义是在于不必要去查几十万行的日志表,只用检索统计信息表就足够了,运营人员会很快的得到结果。

比如登陆登出,有些字段信息很多都是一致的,那么可以存入一张数据表Login,只需加入一个type字段用来标识login或者logou。作为一款在大平台上投放的网页游戏,人数还是有那么多的,对应的全服玩家登录日志信息会很大,不可能全部放在一张数据表中,那么对应就需要分表了,分表策略很简单,按天分表或者按月分表,数据量很少的情况下选择不分表。这样的分表方式有个好处,第一清晰明了,按天分表每天的数据都可见可查,有具体的时间线;第二程序处理方便,数据表每天自动生成,数据分析读取都按天进行依次遍历检索得到结果。第三日志格式写入方式决定的,日志都是按月做文件夹,天小时为文件名,很好的进行了区分。这里就不适合分区分表的存储,首先不知道分区总表的数量,其次程序检索不是很方便。

一条日志对应的就是一个table class,也就是一个table model,他们都有共同的父类logmainTable。

每个table model主要的处理方法有run()检测当天是否存在表,statis()数据表的分析且写入tj_table(统计信息表)。

入口文件是采用php cli模式进行运行,其中的主要参数就是startdate/enddate/del/ 就是在这个时间区间中的表进行分析,如加上del参数则那就是全部重新进行解析(即从日志里面读取记录在此写入mysql)。

日志解析流程

讲日志结构存储为mysql对应的记录的过程。

日志分析流程

在日志解析完成入库后。接下来会立刻执行日志分析,也就是说这是一个动作,两个步骤依次执行的。

需求分析流程

假如来了一个工作需求,比如游戏新开了一个活动,运营的人想着知道这个活动的收益情况以及用户人数、次数信息。运营的通知游戏那边写一个日志type,接下来的事情就是由我们来做了。那么工作的流程就是这样

推荐一下在线图片制作网站 http://www.processon.com/ 挺好用的,各种关系图,原型图都能画。用起来很方便,随时自动保存。还支持下载导出和在线分享。