日志分析系统重新构建了一下,选定的技术方案是ELK,也就是ElasticSearch, LogStash,Kibana。另外加了Filebeat和Kafka

2017.06.28



这两天稍微清闲一些,就趁机重新构建了日志分析系统。没有写代码,全部使用成熟的技术方案来做数据采集,至于后期如何使用这些数据,还在考虑中,先收集吧。
整体的解决方案如下图所示:




其中,日志采集工具使用FileBeat,传输工具使用Kafka,数据整理工具使用LogStash集群,数据存储工具使用ES。当然,这个系统是可以简化的,比如说简化为Filebeat+ElasticSearch,FileBeat+LogStash+ElasticSearch,在不考虑数据Filter和数据处理能力的情况下,这两种方案都可以。但是建立这个平台的初衷是要支持整个网站的所有日志,于是就增加了Kafka,保证数据处理能力。


FileBeat采集数据之后传输给Kafka消息队列,然后LogStash采集消息队列中的数据,作过滤处理,最后将数据传输给ES。FileBeat采集数据时就是Json化的,这个日志采集工具相当轻量级,对系统资源的消耗很少。而LogStash的优点则是有丰富的Filter插件,用于对数据作粗处理。Kafka和ES的优点就不用说了。为了保证系统稳定性,这里所有的组件都使用集群形式。kafka集群使用三台虚拟机,LogStash集群使用两台虚拟机,而ElasticSearch集群使用两台虚拟机。下面来分别说一下各个组件的安装和配置。




FileBeat

FileBeat
是用来替代LogStash-Forwarding的一个组件,是一个轻量级的日志采集器,相比于LogStash-Forwarding日志采集器,Filebeat对系统资源的占用低很多。我这里用到的服务器是Windows,当然也可以放在Linux机器上,配置方法一致。
首先要下载filebeat,下载地址为:https://www.elastic.co/downloads/beats/filebeat#ga-release
<https://www.elastic.co/downloads/beats/filebeat#ga-release>
。这里把安装和使用步骤写的很清楚,我就不赘述了,简单来说就是下载,修改配置文件,启动,观察。所以,请看图:



我用的版本是5.2.2,整个安装目录如下图所示:



其中filebeat.yml表示配置文件,filebeat.template.json表示数据输出的json格式。配置文件详情如下:
filebeat.prospectors: - input_type: log # Paths that should be crawled and
fetched. Glob based paths. paths: - D:\Log\Error\* #类型和编码 encoding: GB2312
document_type: Error# 跨行读取 multiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9
]' multiline.negate: true multiline.match: after- input_type: log # Paths that
should be crawled and fetched. Glob based paths. paths: - D:\Log\Info*
encoding: GB2312 document_type: Info multiline.pattern: '^[0-2][0-9]:[0-5][0-9
]:[0-5][0-9]' multiline.negate: true multiline.match: after
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch: # Array of hosts to connect to. # hosts:
["localhost:9200"] # Optional protocol and basic auth credentials. #protocol:
"https" #username: "elastic" #password: "changeme"
#----------------------------- Logstash output --------------------------------
output.logstash:# Logstash的host地址,这里给两个假的 hosts:
["106.205.10.138:5044","106.205.10.139:5044"]

这份配置文件中,定义了两种类型的日志,分别是Error和Info。日志输出可以是ES,可以使LogStash也可以是Kafka,不过由于Kafka运维还没开过来,我先临时写入到了LogStash中。

配置文件写完之后,就可以启动FileBeat了,Linux下的启动没啥好说的,./filebeat即可。而Windows下的安装有点繁琐,需要使用powershell来执行脚本。打开CMD窗口,具体的安装代码如下:
PowerShell.exe -ExecutionPolicy UnRestricted -File
.\install-service-filebeat.ps1
具体执行如下图:



安装之后,在服务窗口下启动,或者是在CMD窗口执行net start filebeat即可。




LogStash

LogStash
的主要功能是对FileBeat采集到的粗数据作过滤,然后将过滤之后的数据写入到ES中。如果不需要对数据过滤,可以直接从FileBeat或者Kafka将数据写入ES。不过为了实现日志时间解析、冗余字段滤除等功能,这里还是选择增加LogStash的使用。LogStash的安装配置过程如下。

首先是下载安装包,我这里使用的版本是2.4.0,在Linux主机上执行;
wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz sudo
tar -zxf logstash-2.4.0.tar.gz -C /usr/local/ cd /usr/local/logstash-2.4.0 sudo
vim simple.conf
这段代码就是下载安装包、解压安装包、创建配置文件的过程。创建simple.conf之后,我在其中做的配置如下:
input{ beats{ codec => plain{charset => "UTF-8"} port => "5044" } } filter{
mutate{ remove_field => "@version" remove_field => "offset" remove_field =>
"input_type" remove_field => "beat" remove_field => "tags" } ruby{ code =>
"event.timestamp.time.localtime" } } output{ elasticsearch{ codec =>
plain{charset => "UTF-8"} hosts => ["106.205.10.138", "106.205.10.139"] } }
其中input选择将filebeat的数据源作为接入数据,通过output将数据推送到ES中,filter中过滤掉冗余字段。而 code =>
“event.timestamp.time.localtime” 则表示将时间戳从UTC时间改到本地时间,这里是东八区,所以加了八小时。

配置完成之后,启动LogStash,执行代码如下;
bin/logstash -f simple.conf
此时就完成了logstash的安装和配置。




ElasticSearch

最后再来说一下ES的安装和配置,这个在前面一篇文章里写的很清楚了,安装配置过程参见:
http://blyang.cn/index.php/archives/26/
<http://blyang.cn/index.php/archives/26/>






尾声

SO, 到这里,整个安装配置过程结束,看一下效果先:



这是测试数据采集两天之后的状态。后续的数据分析在此基础上进行,可能用Kibana,也可能自己开发,确定的时候会继续写出来。

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信