以前,咱们的某一个业务用于实时日志收集处理的架构大概是这样的:html
在日志的产生端(LogServer服务器),都部署了FlumeAgent,实时监控产生的日志,而后发送至Kafka。通过观察,每个FlumeAgent都占用了较大的系统资源(至少会占用一颗CPU 50%以上的资源)。而另一个业务,LogServer压力大,CPU资源尤为紧张,若是要实时收集分析日志,那么就须要一个更轻量级、占用资源更少的日志收集框架,因而我试用了一下Filebeat。linux
Filebeat是一个开源的文本日志收集器,采用go语言开发,它重构了logstash采集器源码,安装在日志产生服务器上来监视日志目录或者特定的日志文件,并把他们发送到logstash、elasticsearch以及kafka上。Filebeat是代替logstash-forwarder的数据采集方案,缘由是logstash运行在jvm上,对服务器的资源消耗比较大(Flume也是如此)。正由于Filebeat如此轻量级,所以不要奢望它能在日志收集过程当中作更多清洗和转换的工做,它只负责一件事,就是高效可靠的传输日志数据,至于清洗和转换,能够在后续的过程当中进行。bootstrap
Filebeat官网地址为:https://www.elastic.co/guide/en/beats/filebeat/current/index.html 你能够在该地址中下载Filebeat和查看文档。服务器
Filebeat的安装和配置很是简单。框架
下载filebeat-5.6.3-linux-x86_64.tar.gz,并解压。jvm
进入filebeat-5.6.3-linux-x86_64目录,编辑配置文件filebeat.ymlelasticsearch
配置input,监控日志文件:ide
filebeat.prospectors:学习
- input_type: log
paths:
- /data/dmp/openresty/logs/dmp_intf_*.log
配置output到Kafka
#—————————– Kafka output ——————————–
output.kafka:
hosts: ["datadev1:9092"]
topic: lxw1234
required_acks: 1
PS:假设你的Kafka已经安装配置好,并建了Topic。
更多的配置选项,请参考官方文档。
须要大数据学习资料和交流学习的同窗能够加大数据学习群:724693112 有免费资料分享和一群学习大数据的小伙伴一块儿努力
在filebeat-5.6.3-linux-x86_64目录下,执行命令:
./filebeat -e -c filebeat.yml 来启动Filebeat。
启动后,Filebeat开始监控input配置中的日志文件,并将消息发送至Kafka。
你能够在Kafka中启动Consumer来查看:
./kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic lxw1234 –from-beginning
原始日志中,日志格式以下:
2017-11-09T15:18:05+08:00|~|127.0.0.1|~|-|~|hy_xyz|~|200|~|0.002
Filebeat会将消息封装成一个JSON串,除了包含原始日志,还包含了其余信息。
@timestamp:消息发送时间
beat:Filebeat运行主机和版本信息
fields:用户自定义的一些变量和值,很是有用,相似于Flume的静态拦截器
input_type:input类型
message:原始日志内容
offset:此条消息在原始日志文件中的offset
source:日志文件
另外, Filebeat对CPU的占用状况:
通过初步试用,如下方面的问题还有待继续测试:
数据可靠性:是否存在日志数据丢失、重复发送状况;
可否对Filebeat的消息格式进行定制,去掉一些冗余无用的项。