blyang 你长的很好看啊~
ELK+FileBeat日志分析系统
发表于: | 分类: Application | 评论:0 | 阅读: 47346

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



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

请输入图片描述

其中,日志采集工具使用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:\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/




尾声


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

请输入图片描述

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

评论已关闭

TOP