概述
日志分析系统重新构建了一下,选定的技术方案是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。这里把安装和使用步骤写的很清楚,我就不赘述了,简单来说就是下载,修改配置文件,启动,观察。所以,请看图:
我用的版本是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:LogError*
#类型和编码
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:LogInfo*
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/
尾声
SO, 到这里,整个安装配置过程结束,看一下效果先:
这是测试数据采集两天之后的状态。后续的数据分析在此基础上进行,可能用Kibana,也可能自己开发,确定的时候会继续写出来。
最后
以上就是平常鞋垫为你收集整理的ELK+FileBeat日志分析系统的全部内容,希望文章能够帮你解决ELK+FileBeat日志分析系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复