ELK学习笔记之filebeat合并多行日志示例
0x00 概述
本节中的示例包括以下内容:
- 将Java堆栈跟踪日志组合成一个事件
- 将C风格的日志组合成一个事件
- 结合时间戳处理多行事件
同理,你可以把如下的正则应用在容器的yaml文件内。
0x01 Java堆栈日志
Java示例一:
Java堆栈跟踪由多行组成,每一行在初始行之后以空格开头,如本例中所述:
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
此配置将以空格开头的所有行合并到上一行。
Java示例二:
下面是一个Java堆栈跟踪日志,稍微复杂的例子:
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
at com.example.myproject.Author.getBookIds(Author.java:38)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
at com.example.myproject.Book.getId(Book.java:22)
at com.example.myproject.Author.getBookIds(Author.java:35)
... 1 more
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after
此配置解释如下:
- 将以空格开头的所有行合并到上一行
- 并把以Caused by开头的也追加到上一行
0x02 C风格的日志
一些编程语言在一行末尾使用反斜杠(\)字符,表示该行仍在继续,如本例中所示:
printf ("%10.10ld \t %10.10ld \t %s\
%f", w, x, y, z );
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '\\$'
multiline.negate: false
multiline.match: before
此配置将以\字符结尾的任何行与后面的行合并。
0x03 时间戳
来自Elasticsearch等服务的活动日志通常以时间戳开始,然后是关于特定活动的信息,如下例所示:
[2019-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/
(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]
要将这些行整合到Filebeat中的单个事件中,请使用以下多行配置:
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
# 此配置使用negate: true和match: after设置来指定任何不符合指定模式的行都属于上一行。
0x04 应用程序事件
有时您的应用程序日志包含以自定义标记开始和结束的事件,如以下示例:
[2019-08-24 11:49:14,389] Start new event
[2019-08-24 11:49:14,395] Content of processing something
[2019-08-24 11:49:14,399] End event
要在Filebeat中将其整合为单个事件,请使用以下多行配置:
multiline.pattern: 'Start new event'
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'
此配置把指定字符串开头,指定字符串结尾的多行合并为一个事件。
0x05 拓展知识
filebeat和logstash的合并方式几乎无区别
input {
file {
path => "/var/*.log"
codec => multiline {
pattern => "^\[\d{2}-"
negate => true
what => "previous"
}
}
}
# what确定合并属于上一个事件还是下一个事件,可以为next和previous
# 而filebeat对应的是multiline.match: after和before
这是一个传承的关系:
因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入elastic以后,因为elastic本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以elastic干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。
参考1
参考2
ELK学习笔记之filebeat合并多行日志示例的更多相关文章
- ELK-6.5.3学习笔记–使用filebeat管理微服务日志
微服务日志打印. 转载于http://www.eryajf.net/2369.html 上边是输出了nginx日志,从而进行展示,以及各种绘图分析,而现在的需求是,要将微服务当中的日志汇总到elk当中 ...
- LevelDB 学习笔记2:合并
LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出的 L0 层的 sstab ...
- ELK+Kafka学习笔记之FileBeat日志合并配置输出到kafka集群
filebeat.prospectors: - type: log #日志输出类型 enabled: true ...
- ELK学习笔记之CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建
0x00 简介 现在的公司由于绝大部分项目都采用分布式架构,很早就采用ELK了,只不过最近因为额外的工作需要,仔细的研究了分布式系统中,怎么样的日志规范和架构才是合理和能够有效提高问题排查效率的. 经 ...
- K8S学习笔记之filebeat采集K8S微服务java堆栈多行日志
0x00 背景 K8S内运行Spring Cloud微服务,根据定制容器架构要求log文件不落地,log全部输出到std管道,由基于docker的filebeat去管道采集,然后发往Kafka或者ES ...
- ELK学习笔记之Logstash详解
0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...
- ELK学习笔记之logstash安装logstash-filter-multiline(在线离线安装)
0x00 概述 ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中单条单条,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题 g ...
- 使用 Filebeat 对多行日志进行处理(multiline)
Filebeat 收集日志的过程中,默认是按行收取的,也就是每一行都会默认是一个单独的事件并添加时间戳.但是在收集一些特殊日志的时候,往往一个事件包含有多行,例如 Java 的堆栈跟踪日志: 20-0 ...
- python学习笔记(二十八)日志模块
我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...
随机推荐
- wpf 代码设置图片路径(后台和xamll)
项目中经常使用背景图片,当一个小组共通开发时,路径的选择应该是在项目运行的固定文件夹下 此时,可用代码实现:pack://SiteOfOrigin:,,,/Images/Icons/HomePageB ...
- 2-2array结构
In [1]: import numpy as np 对于ndarra结构来说,里面所有的元素必须 是同一类型的如果不是的话,会自动的向下进行转换 In [2]: tang_list=[1,2,3 ...
- appium---app输入中文
在app自动化的过程中,都会遇到输入中文的问题,今天总结下app自动化如何输入中文 app输入中文 在启动app的时候在参数里面添加unicodeKeyboard和resetKeyboard后,运行代 ...
- pyhive client连接hive报错处理:Could not start SASL
本来一切就绪,镜像里已安装如下主要的pip包. pyhive configparser pandas hdfs thrift sqlparse sasl thrift-sasl 但,使用pyhive ...
- jmeter压测学习7-登录参数化(CSV 数据文件设置)
前言 我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况. 如果要压测登录接口,肯定得准备几百,甚至上千的账号去登录,测试的结果才具有 ...
- 201871010118-唐敬博《面向对象程序设计(java)》第十周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- 201871010133-赵永军《面向对象程序设计(java)》第十二周学习总结
201871010133-赵永军<面向对象程序设计(java)>第十二周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- Maven 拥有三套相互独立的生命周期:clean、default、site
table th:nth-of-type(1) { width: 70px; } table th:nth-of-type(2) { width: 100px; } 生命周期 目的 包含的阶段 cle ...
- angular 学习记录
3章3小结 路由传参的3种方式和路由快照,订阅, @相同路由的跳转(只是参数不同),并不会触发Oninit ,因为没有重新创建component @子路由 //此种情况 是当我路由地址是 ../Hom ...
- Visualforce 页面的生命周期
了解 Visualforce 页面的生命周期可以让我们明白其各个元素的执行顺序.改变逻辑,从而提高开发效率,避免不必要的错误. 在官方文档中有详细的讲解.本文摘取其中的要点,作为一个总结. Visua ...