前言
在大型分布式集群系统中由于日志是分布在不同服务器上,在排错过程中需要登录不同服务器grep | tail 查看日志是非常不方便,所以需要统一的日志管理平台聚合收集日志。比如阿里的sls(收费产品)…
但是一般实际开发过程中存在4套环境,dev(开发),test(测试),pre(预发验证),和prod(生产)。如果你的生产环境使用的是全套云服务且忽略成本,那你可以直接使用云服务厂商的日志组件。单如果你想节约成本,有没有不收费又好用的日志组件呢?有,ELK。
ELK是目前最流行的日志搜索组合组件,分别是Elasticsearch+Logstash+Kibana组件的简称,但是FileBeat又是什么玩意儿呢?请往下看。
本文环境:
Windows10+(Elasticsearch+Logstash+Kibana+FileBeat)7.8.0
为什么是windows环境,首先在搭建ELK环境过程中需要大量编写测试一些配置文件要不停调试,配置文件在(Linux | windows)环境是通用的,为了方便且更好的写好这篇文章,所以直接用我本地环境。本文以实战为主,拒绝花里胡巧没用的。ok,在动手搭建之前先简单介绍一下这4个组件到底是干什么的。
1、ElasticSearch
1、基于Lucene的分布式全文搜索引擎,2、基于rest接口,3、java语言开发,源码开放。从这3点可以看出,1、扩展方便为分布式而生,2、基于rest接口访问,无关对接语言,3、开源免费,研发实力足够强可以自己定制。es天生适合做大数据搜索存储
2、Logstash
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储
简单解释下,这个组件是专门收集日志,并且对日志进行加工处理格式化,然后分发到你指定的地方(mysql,mq,nosql)的一个数据处理管道。基于java环境,但是特别占用内存
3、Kibana
开源的分析和可视化web平台,主要是和es搭配使用。
4、FileBeat
轻量级的日志采集工具,它和Logstash是同一个作者,因为Logstash太笨重且吃内存,所有作者新出了这么一个组件,FileBeat可以一个进程搜集服务器中所有指定的多个日志文件。Logstash做不到的,但是Logstash强大的数据处理和数据分发能力比FileBeat做的好。
下面是这4个组件简单的逻辑关系图
在搭建之前先下载这4个组件, https://www.elastic.co/cn/downloads/
1、启动Elasticsearch
如果你是Linux,请异步 这里
修改es配置文件
以下是我的配置:
修改完成直接双击启动
浏览器访问如下,则启动成功。
2、Kibana启动
修改Kibana配置文件
双击启动即可
启动成功页面
启动成功之后可以在Kibana中查看一下当前es中存在的索引
3、启动logstash
编写一个logstash_test.conf配置文件,体验一下Logstash
启动命令
直接在控制台输入test logstash,控制台输出我们输入的内容
换一种输出数据的格式,以json | rubydebug
大家可以自己测试,看一下输出的效果
Logstash接入FileBeat
配置文件做一下改动,多了inpu插件配置,监听一个5044端口,这个就是FileBeat网络端口
4、启动FileBeat
新建FileBeat配置文件filebeat_test.yml
启动FileBeat
访问demo项目,打印一些日志,让FileBeta读取
Logstash控制台,这是json形式打印出来的
我们挑一条日志格式化看看FileBeat采集的日志通过Logstash打印出来之后是什么样子。
以上就是FileBeat收集通过Logstash未经过滤打印在控制台的数据,可以看到FileBeat收集的日志还是很全面(软件,硬件,网络),这些日志我们并不全部需要,我们仅把自己需要的字段存储即可,这就需要格式化数据。格式化数据需要借助Logstash的Filter插件, https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
找到grok插件,它的意思是将非结构化事件数据转为字段,转为字段之后我们方便存储统计
我们真正要提取的是message字段,这个字段是我们实际的业务日志,使用grok编写正则去提取message字段,可以用Kibana自带的grok工具或者是 http://grokdebug.herokuapp.com/?#(grokdebug并不好用,时常无法访问)
来测试编写正则,匹配提取我们的日志,下图就展示了将message抽取为一个个单独的字段
完整的Logasth配置
重启Logstash观察控制台日志
现在看这个日志基本上已经是我们想要的,包括,日志路径,应用名,业务日志,主机信息等核心日志信息。
接着我们将日志结果输出到ES中去 文档地址: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-index
高版本的Logstash日志索引默认建立方式是{now/d}-000001 格式,例如:logstash-2020.02.10-000001,如果想自己定义指定 ilm_enabled => false即可
Logstash配置输出到ES完整配置,加了详细配置说明
Kibana展示日志数据,Kibane读取ES的数据索引
Kibana->Discover展示数据
全量message
message字段解析之后的字段展示
建立日志分析图
饼图,按照应用维度创建
柱形图,按照日志级别维度创建
时间维度,最近30次日志分布
创建仪表盘
注意,如果你想改图示名字,点击save重新保存即可,图示改名也是如此。
以上就是ELK+FileBeat全量配置,如果日志量太大可以优化Logsasth,比如加Logstash集群,不使用正则匹配日志等,本文ELK虽然是基于windows搭建,但配置信息在Linux是可以使用。
linux环境下后台启动
nohup filebeat -e -c filebeat_pre.yml &
nohup ./bin/logstash -f config/logstash_pre.conf &
nohup ./bin/kibana --allow-root &
参考材料:
官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
https://www.elastic.co/guide/en/kibana/current/index.html
https://www.elastic.co/guide/en/logstash/current/index.html
https://www.elastic.co/guide/en/beats/libbeat/current/index.html
Kibana中文文档:
https://www.elastic.co/guide/cn/kibana/current/index.html