大纲:
- 前言
- 日志系统架构是怎样的
- 游戏分析有什么内容
- 为什么要自己架一个系统
- FEN架构 架构图 Fluentd ElasticSearch NodeJS pusher logger analyser 用户界面
- 总结
前言
最近我司需要做一个统一的游戏日志系统,要求有一定的通用性,能应对公司所有的游戏业务。接下来分享一下这次日志系统的项目经验。
日志系统架构是怎样的
目前流行的日志系统为ELK,由Beats、Logstash、Elasticsearch、Kibana等组件共同实现,但万变不离其宗,一个基本的日志系统架构类似如下:
游戏分析有什么内容
游戏分析,与其它服务系统不同的是,游戏内的系统可能是天马行空的,数据类型是多样的,甚至频繁变化的。我们要在变化中总结到不变的内容,例如系统经济产出,玩家物品消耗,商店购买等进行分析。所以这次的游戏日志系统要满足以下需求:
记录游戏日志,并随时检索日志;
分析玩家行为:玩家留存相关,玩家物品消耗,商店消耗等有一定复杂度的分析;
能建立一个统一的日志系统:一次性满足未来游戏运营多样性。
为什么要自己架一个系统
虽然ELK在安装配置方面不算困难,插件众多,例如Filebeat,读log文件,过滤格式,转发,但谁来生产这些log文件,没有提及。实际上,业务具有多样性,只要有日志文件的地方,它就可以用。例如多数会使用Nginx进行日志收集。我们也需要考虑到日志生产者的问题,责权分离,需要单独一台机子进行日志采集。
游戏是一种技术与艺术结合的产品,数据庞杂,形态各异,光日志埋点也花不少功夫复杂,但不能因此放弃治疗。好的游戏日志,还可以帮我们还原玩家玩家画像。游戏更新周期短,数据变化大,需要提供更实时参照报表,为非技术人员更好友的查询界面,才能更好的服务于游戏数据分析。ELK 在这方面,基本解决了采集和储存的问题,但实现分析方面还不能满足我们的需求。
经过一翻思索,我们可以用现有工具,粘合多个套件,所以,我们有了以下思路:
- 日志采集器:
利用Fluented作为日志文件采集器,生产者通过内网HTTP发送到采集器上,那每个生产者同一内网只要部署一个采集器即可,如果量特别大,可以多个,游戏的功能埋点可以统一;
- 转发器:
利用NodeJS进行 HTTP 转发即可,前提是能按顺序和分段读取日志文件ÿ