Filebeat合并多行消息

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

如果要将多行事件发送到Logstash,请在将事件数据发送到Logstash之前,使用此处介绍的选项处理多行事件。尝试在Logstash中实现多行事件处理(例如,通过使用Logstash多行编解码器)可能会导致流和损坏的数据混合。

另请阅读避免YAML格式问题正则表达式支持,以避免常见错误。

配置选项

您可以filebeat.inputsfilebeat.yml配置文件的部分中指定以下选项,以控制Filebeat如何处理跨越多行的消息。

以下示例显示如何配置Filebeat来处理多行消息,其中消息的第一行以方括号([)开头。

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

Filebeat接受所有不以开头的行,[并将它们与上一行合并。例如,您可以使用此配置将多行消息的以下行加入单个事件:

[beat-logstash-some-name-832-2015.11.28] IndexNotFoundException[no such index]
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133)
    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77)
    at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)
  • multiline.pattern

    指定要匹配的正则表达式模式。请注意,Filebeat支持的正则表达式模式与Logstash支持的模式有些不同。有关受支持的正则表达式模式的列表,请参见正则表达式支持。根据您配置其他多行选项的方式,与指定正则表达式匹配的行将被视为上一行的延续或新多行事件的开始。您可以设置negate选项以否定图案。

  • multiline.negate

    定义是否否定模式。默认值为false

  • multiline.match

    指定Filebeat如何将匹配的行组合到事件中。设置为afterbefore。这些设置的行为取决于您为negate以下内容指定的内容:

    NOTE

    after设置等效previousLogstashbefore等效于next

  • multiline.flush_pattern

    指定一个正则表达式,将从内存中刷新当前多行,结束匹配多行消息。

  • multiline.max_lines

    可以合并的最大行数。如果消息行数超过max_lines`,则所有超过行将被丢弃。默认值为500。

  • multiline.timeout

    在指定的超时后,即使未找到新的模式来启动新事件,Filebeat也会发送多行事件。默认值为5秒。

多行配置的实例

本节中的示例涵盖以下用例:

  • 将Java堆栈跟踪组合到单个事件中
  • 将C样式的行延续合并到单个事件中
  • 合并时间戳事件中的多行
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: true		
multiline.match: after

此配置将以空格开头的任何行合并到上一行。

时间戳

来自诸如Elasticsearch之类的服务的活动日志通常以时间戳记开头,后跟有关特定活动的信息,如本例所示:

[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]

要将这些行合并到Filebeat中的单个事件中,请使用以下多行配置:

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

此配置使用negate: truematch: after设置来指定任何与指定模式不匹配的行都属于上一行。

应用程序事件

有时,您的应用程序日志包含事件,这些事件以自定义标记开头和结尾,例如以下示例

[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

要将其整合为Filebeat中的单个事件,请使用以下多行配置:

multiline.pattern: 'Start new event'
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'

flush_pattern选项指定将刷新当前多行的正则表达式。如果想到pattern选项指定事件的开始,那么该flush_pattern选项将指定事件的结束或最后一行。
更多信息请看官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值