java multiline_FileBeat多行消息Multiline

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

1、配置项

你可以在filebeat.yml的filebeat.inputs区域指定怎样处理跨多行的消息。例如:

multiline.pattern: '^\['

multiline.negate: true

multiline.match: after

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

multiline.pattern

指定用于匹配多行的正则表达式

multiline.negate

定义模式是否被否定。默认false。

multiline.match

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

multiline.flush_pattern

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

multiline.max_lines

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

2、多行配置示例

2.1 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)

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

multiline.pattern: '^[[:space:]]'

multiline.negate: false

multiline.match: after

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

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

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

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

multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'

multiline.negate: false

multiline.match: after

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

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

2)以 Caused by: 开头的行

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

printf ("%10.10ld \t %10.10ld \t %s\

%f", w, x, y, z );

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

multiline.pattern: '\\$'

multiline.negate: false

multiline.match: before

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

2.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]

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

multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'

multiline.negate: true

multiline.match: after

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

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

multiline.pattern: 'Start new event'

multiline.negate: true

multiline.match: after

multiline.flush_pattern: 'End event'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值