一、概述
ELK 已经成为今朝最风行的会合式日志办理方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等组件构成,来配合完成及时日志的收集,存储,展示等一站式的办理方案。本文将会先容ELK常见的架构以及相关问题办理。
二、ELK常见陈设架构
2.1、Logstash作为日志收集器
这种架构是较量原始的陈设架构,在各应用处事器端别离陈设一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、阐明、名目化处理惩罚后发送至Elasticsearch存储,最后利用Kibana举办可视化展示,这种架构不敷的是:Logstash较量耗处事器资源,所以会增加应用处事器端的负载压力。
2.2、Filebeat作为日志收集器
该架构与第一种架构独一差异的是:应用端日志收集器换成了Filebeat,Filebeat轻量,占用处事器资源少,所以利用Filebeat作为应用处事器端的日志收集器,一般Filebeat会共同Logstash一起利用,这种陈设方法也是今朝最常用的架构。
2.3、引入缓存行列的陈设架构
该架构在第二种架构的基本上引入了Kafka动静行列(还可以是其他动静行列),将Filebeat收集到的数据发送至Kafka,然后在通过Logstasth读取Kafka中的数据,这种架构主要是办理大数据量下的日志收集方案,利用缓存行列主要是办理数据安详与平衡Logstash与Elasticsearch负载压力。
2.4、以上三种架构的总结
第一种陈设架构由于资源占用问题,现已很少利用,今朝利用最多的是第二种陈设架构,至于第三种陈设架构小我私家以为没有须要引入动静行列,除非有其他需求,因为在数据量较大的环境下,Filebeat 利用压力敏感协议向 Logstash 或 Elasticsearch 发送数据。假如 Logstash 正在忙碌地处理惩罚数据,它会奉告 Filebeat 减慢读取速度。拥塞办理后,Filebeat 将规复初始速度并继承发送数据。
三、问题及办理方案
问题:如何实现日志的多行归并成果?
系统应用中的日志一般都是以特命名目举办打印的,属于同一条日志的数据大概分多行举办打印,那么在利用ELK收集日志的时候就需要将属于同一条日志的多行数据举办归并。
办理方案:利用Filebeat或Logstash中的multiline多行归并插件来实现
在利用multiline多行归并插件的时候需要留意,差异的ELK陈设架构大概multiline的利用方法也差异,昆山软件公司,假如是本文的第一种陈设架构,那么multiline需要在Logstash中设置利用,假如是第二种陈设架构,那么multiline需要在Filebeat中设置利用,劳务派遣管理系统,无需再在Logstash中设置multiline。
1、multiline在Filebeat中的设置方法:
filebeat.prospectors: - paths: - /home/project/elk/logs/test.log input_type: log multiline: pattern: '^\[' negate: true match: after output: logstash: hosts: ["localhost:5044"]
如:
pattern: '\[' negate: true match: after
该设置暗示将不匹配pattern模式的行归并到上一行的末端
2、multiline在Logstash中的设置方法
input { beats { port => 5044 } } filter { multiline { pattern => "%{LOGLEVEL}\s*\]" negate => true what => "previous" } } output { elasticsearch { hosts => "localhost:9200" } }
(1)Logstash中设置的what属性值为previous,相当于Filebeat中的after,Logstash中设置的what属性值为next,相当于Filebeat中的before。
(2)pattern => “%{LOGLEVEL}\s*\]” 中的LOGLEVEL是Logstash预制的正则匹配模式,预制的尚有许多几何常用的正则匹配模式,具体请看:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
问题:如何将Kibana中显示日志的时间字段替换为日志信息中的时间?