背景及目标
游戏平台每天产生上千万条牌局结算日志(包括跑得快PDK、斗地主DDZ等各种游戏),这些日志未非结构化数据。很多时候,我们需要依据这些日志制定各种业务服务,如道具、礼包等。
不同的业务服务(如只针对PDK游戏提供优惠礼包服务),需要的日志可能是不同的,如果将所有的日志全部塞给业务服务,交由业务服务区筛选,那么业务服务需要承担太多不必要的压力(一千万条日志中,需要的可能只有一千条)。
因此,想要一个实现游戏日志处理系统,实现如下功能:
- 监控日志文件,收集日志。
- 处理日志:非结构化转为结构化数据(如JSON)。
- 输出结构化数据到消息中间件。
- 业务服务可以从消息中间件中获取自己想要的消息。
技术方案
filebeat收集事件
虽然logstash也可以收集日志,且有很多丰富的输入、处理、输出插件,但是logstash相对于filebeat来说会消耗更多的服务器资源,这些logstash如果部署在应用服务其中,可能对应用服务带来影响(抢资源)。
filebeat则是及其轻量级的,占用资源少,适合分布在各个应用服务上收集日志,并将收集到的日志发送到logstash服务。另外,filebeat具有调节发送速度的功能,当logstash处理不过来时,filebeat会降低发送速度,因此不需要类似于中间缓冲队列等机制。
基于此,本系统中选用filebeat
而不是logstash来收集日志。
filebeat安装
以mac OS 系统为例:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-darwin-x86_64.tar.gz
tar xzvf filebeat-6.2.4-darwin-x86_64.tar.gz
filebeat配置
filebeat的配置文件:filebeat.yml,其中主要内容为:
#============= Filebeat prospectors ===============
# 探测器配置,即filebeat的输入
## 配置一个探测器
filebeat.prospectors:
## 探测器类型:日志
- type: log
## 是否启用该探测器
enabled: true
## 日志文件路径,当前不支持递归监控某个目录及其子目录下的所有文件。
## 要监控子目录,则可以配:/var/log/*/*.log
paths:
- /var/log/*.log
## 去掉正则表达式列表中的行
exclude_lines: ['^DBG', '^D2']
## 包含正则表达式列表中的行
include_lines: ['^ERR', '^E2']
## 去掉正则表达式列表中匹配的文件
exclude_files: ['.gz$']
#============================= 其他配置(和本系统关系不大,略) ====================
#================================ Outputs =====================================
# 输出配置,可输出到诸如logstash,elasticsearch,kafka等服务或中间件。
## 输出到logstash
output.logstash:
# 目标logstash的服务地址及端口
hosts: ["localhost:5044"]
本系统中,暂时没有用到复杂、高阶的filebeat配置,仅简单地配置输入(日志文件)和输出(logstash)。
更详细的配置可以参见官方说明。
另外,filebeat提供了一些预定义的模组(module),可快速地对诸如nginx,mysql的日志进行收集。
注意:只能配置一个output
。
filebeat启动
以mac OS为例:
./filebeat -e -c filebeat.yml -d "publish"
logstash接收事件
filebeat收集到的事件要想推送到logstash,除了要在filebeat.yml的output中配置之外,还需要在logstash的input
模块中配置beats
:
input {
## 来自于filebeat的事件作为输入
beats {
## 端口与filebeat中filebeat.yml文件output中配置的端口一致。
port => 5044
}
}
启动logstash服务、filebeat服务之后,往/var/log/目录中的日志文件中写入日志,如:
echo "test info ..." >> /var/log/test.log
就能在filebeat的运行日志中,看到相关内容,也可以在logstash的输出中看到相应事件。
关于logstash
的配置文件,将在后续的博客中详细介绍。
小结
filebeat 还有很多高阶特性(如一些方便的模组)可以使用,这里只是简单地介绍了一种常用的用法。
在后续的文章中,将使用logstash
来处理从filebeat
过来的数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。