Filebeat Multiline

标签: ELK ELK | 发表时间:2019-11-09 11:49 | 作者:
出处:http://www.leiyawu.com/

Filebeat获取的文件可能包含跨多行文本的消息,例如,多行消息在包含Java堆栈跟踪的文件中很常见。为了正确处理这些多行事件,你需要在filebeat.yml中配置multiline以指定哪一行是单个事件的一部分。

1.配置项

在filebeat.yml的filebeat.inputs区域指定怎样处理跨多行的消息

1     
2
3
     multiline.pattern: '^\['      
multiline.negate: true
multiline.match: after

上面的例子中,Filebeat将所有不以 [ 开始的行与之前的行进行合并。

1     
2
3
4
5
6
7
8
9
10
11
12
13
14
     multiline.pattern      
指定用于匹配多行的正则表达式

multiline.negate
定义模式是否被否定。默认false。

multiline.match
指定Filebeat如何把多行合并成一个事件。可选的值是 after 或者 before。

multiline.flush_pattern
指定一个正则表达式,多行将从内存刷新到磁盘。

multiline.max_lines
可以合并成一个事件的最大行数。如果一个多行消息包含的行数超过max_lines,则超过的行被丢弃。默认是500。

2.多行配置示例

2.1 Java堆栈跟踪

Java堆栈跟踪由多行组成,在初始行之后的每一行都以空格开头,例如下面这样:

1     
2
3
4
     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)

为了把这些行合并成单个事件,用写了多行配置:

1     
2
3
     multiline.pattern: '^[[:space:]]'      
multiline.negate: false
multiline.match: after

这个配置将任意以空格开始的行合并到前一行

下面是一个稍微更复杂的例子

1     
2
3
4
5
6
7
     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

为了合并这个,用下面的配置:

1     
2
3
     multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'      
multiline.negate: false
multiline.match: after

在这个例子中,模式匹配下列行:

1)以空格开头,后面跟 at 或者 … 的行

2)以 Caused by: 开头的行

一些编程语言使用行尾的反斜杠()字符表示该行继续,如本例所示:

1     
2
     printf ("%10.10ld  \t %10.10ld \t %s\      
%f", w, x, y, z );

为了把这样的多行合并成单个事件,用下列配置:

1     
2
3
     multiline.pattern: '\\$'      
multiline.negate: false
multiline.match: before

这段配置合并任意以 \ 结尾的行

2.2 时间戳

下面是以时间戳开始的日志

1     
2
     [2015-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]

为了合并这种行,用下列配置:

1     
2
3
4
5
6
7
8
     multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'      
multiline.negate: true
multiline.match: after

[0-9]{4}表示在0-9数字中读4位
[0-9]{2}表示在0-9数字中读2位
对应YYYY-MM-DD,即必须为这种格式的年月日
整个multiline.pattern意思则是:不是以YYYY-MM-DD开头的行合并到前一行
2.3 应用事件

有时你的应用日志包含事件,自定义的开始和结束时间,例如:

1     
2
3
     [2015-08-24 11:49:14,389] Start new event      
[2015-08-24 11:49:14,395] Content of processing something
[2015-08-24 11:49:14,399] End event

为了合并这种行,用下面的多行配置:

1     
2
3
4
     multiline.pattern: 'Start new event'      
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'

参考文献: https://www.jianshu.com/p/4e4a7450c305

相关 [filebeat multiline] 推荐:

Filebeat Multiline

- - 让一切随风
Filebeat获取的文件可能包含跨多行文本的消息,例如,多行消息在包含Java堆栈跟踪的文件中很常见. 为了正确处理这些多行事件,你需要在filebeat.yml中配置multiline以指定哪一行是单个事件的一部分. 在filebeat.yml的filebeat.inputs区域指定怎样处理跨多行的消息.

elasticsearch和filebeat学习笔记

- -
elasticsearch安装、维护以及Filebeat module编写相关的笔记,备忘. 全文检索: q=first. 单字段全文检索:q=user:prismcdn. 单字段精确检索:q=user:”prismcdn”. 多个检索条件的组合:NOT、AND、OR、(、),如q=user:(“prismcdn” OR “hello”) AND NOT mesg:first.

Filebeat 的 Registry 文件解读

- - IT瘾-dev
你可能没有注意但很重要的filebeat小知识. Filebeat会将自己处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启之后能够接着处理未处理过的数据,而无需从头开始. registry文件内容为一个list,list里的每个元素都是一个字典,字典的格式如下:. source:记录采集日志的完整路径.

日志实时收集之FileBeat+Kafka

- - lxw的大数据田地
之前,我们的某一个业务用于实时日志收集处理的架构大概是这样的:. 在日志的产生端(LogServer服务器),都部署了FlumeAgent,实时监控产生的日志,然后发送至Kafka. 经过观察,每一个FlumeAgent都占用了较大的系统资源(至少会占用一颗CPU 50%以上的资源). 而另外一个业务,LogServer压力大,CPU资源尤其紧张,如果要实时收集分析日志,那么就需要一个更轻量级、占用资源更少的日志收集框架,于是我试用了一下Filebeat.

Filebeat + Elasticsearch + Kibana 轻量日志收集与展示系统

- - wzyboy’s blog
有个段子是说现在创业公司招人的如果说自己是「大数据」(Big Data),意思其实是说他们会把日志收集上来,但是从来不看. 段子归段子,近些年所谓「微服务」「容器化」等「热门技术」的发展,的确促进了日志收集等技术的发展. 而 ELK ( Elasticsearch +. Kibana) 也不再是日志收集与展示系统的铁三角了.

elk-filebeat收集docker容器日志 - devzxd - 博客园

- -
filebeat安装与配置. 1、使用docker-compose文件构建elk. 2、执行docker-compose up -d 启动elk. 可以使用docker logs 命令查看elk启动日志. 启动成功后打开浏览器访问 http://127.0.0.1:5601. 关于filebeat本文也不做过多介绍.

FileBeat采集JSON日志_大数据_Mr.Bean-CSDN博客

- -
FileBeat采集JSON日志. 使用FileBeat采集JSON日志传输到logstash或者elasticsearch中,其中FileBeat的版本为5.5.0,Elasticsearch的版本为5.6.8. 关于配置filebeat的json采集,主要需要注意的有以下几个配置项. 上面的几个配置项,只要配置了任意一项,filebeat就会开启json采集的功能.

filebeat使用elasticsearch的pipeline处理日志内容 | 阿小信的博客

- -
以前使用Logstash时,都是通过logstash来对日志内容做过滤解析等操作,现在6.3.0版本中,可以通过filebeat直接写数据到es中,要对日志内容做处理的话设置对应的pipeline就可以. 以gunicorn的access日志内容为例:. 有以上内容的日志,记录请求发生的时间,发起请求的ip,referer,useragent,status_line, status_code, 进程id, 请求执行时间.

使用filebeat收集kubernetes中的应用日志 - 宋净超的博客|Cloud Native|云原生布道师

- -
本文已同步更新到Github仓库. kubernetes-handbook中. 使用Logstash收集Kubernetes的应用日志,发现logstash十分消耗内存(大约500M),经人提醒改用filebeat(大约消耗10几M内存),因此重写一篇使用filebeat收集kubernetes中的应用日志.