ELK日志分析系统介绍

1. 系统概述

本系统为业务日志分析监控系统,使用ELK+Beats实现对系统业务日志的收集、存储、分析,业务系统运行期间将相关日志输出到一个指定的文件夹/文件内,使用FileBeat组件实现对日志文件夹/文件的监听,可以直接将新增的数据发往设定好的Logstash中过滤,或直接发往ElasticSearch分类存储,当系统运行出现问题时,运维人员可以使用Kibana对存储在ES中的日志数据根据相关字段搜索查找,Kibana也支持对数据进行相应的可视化图表展现。

2. 系统实现描述

2.1 采集-filebeat

对于日志数据收集使用Filebeat部署在业务服务器后台监听日志文件的方式。Filebeat运行环境没有任何依赖,后台运行占用内存资源极低,相比于Logstash可以忽略不计,不影响服务器正常的业务。Filebeat可以运行在Mac OS、Windows、Linux等系统下。

Filebeat监听指定的文件(可以使用通配符),一旦文件中有新的一行内容追加则会将这条数据发往配置好的output路径。Filebeat的output支持logstash、ElastciSearch、file、console等,一般的不需要复杂过滤的可以直接发往ES存储,多节点日志采集也可以经过Logstash汇总过滤后,再存储进ES。

在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。当Filebeat进行了重启后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。

2.2 解析 - Logstash

对于数据解析主要包括:
(1) 对汇总多节点后的日志进行区分
(2) 将不规则格式数据转换为规则数据
(3) 将不符合格式要求的数据过滤去除

因为Filebeat只支持简单的数据解析,对于日志的解析过滤整体可以使用Logstash。Logstash内置许多解析格式:grok、date、ip、json...,支持对不规则的数据字符串进行规则化输出,也能够在数据传输过程中添加或删除某些指定字段。将采集到的日志数据经过logstash过滤转换后发往ES建立索引存储。因为logstash占用内存资源较大(默认1G),为不影响业务尽量不部署在业务服务器上。

2.3 存储 - ElasticSearch

日志数据存储使用ElasticSearch,由logstash将过滤完成后的规则化数据存入ES指定索引中。

ES有自动发现功能,初期使用ElasticSearch的单节点集群模式,后续想要添加节点只需指定elasticsearch集群名称保持一致,就能自动加入集群,ES就会按照配置将索引分片到新加入的节点上。

2.4 展现 - Kibana

(1) ELK中Kibana专门为ES中的数据提供可视化展现的,支持搜索、汇总计算,图表展现等。
(2) ElasticSearch也提供有REST API,支持调用接口的方式访问操作索引数据。
(3) 使用插件进行数据异常监控报警功能实现,如系统日志出现异常报错则可配置发送邮件通知相关人员。
(4) Kibana也支持对系统日志进行可视化监控展现,包括CPU、内存、硬盘等。

3. 系统可用性测试

  1. 系统运行过程中,logstash宕机:

    1.png Filebeat会记录发送不成功的数据,并尝试连接logstash,成功连接后会再次将数据发往logstash,下图为再次发送成功后的日志。 2.png

  2. 系统运行过程中,Filebeat宕机:

    在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。当Filebeat进行了宕机重启后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已读取的位置开始往后进行数据读取。

  3. 系统运行过程中,ES集群宕机: ::: hljs-center Logstash日志 :::

    3.png ::: hljs-center Filebeat日志 ::: 4.png logstash没有数据存储功能,ES集群宕机,logstash数据无法发送,Filebeat会记录未成功发送的数据,同时logstash定时尝试连接ES,直到连接成功,数据会再次发送。