ELK-filebeat配置多行解析(四)

警告
本文最后更新于 2021-03-18 21:16,文中内容可能已过时。

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

##一、 简单示例

1
2
3
4
5
6
7
filebeat.inputs:
  - type: log
    paths:
      - /var/log/test.log
    multiline.pattern: '^\d{4}-\d{2}-\d{2}'
    multiline.negate: true
    multiline.match: after

##二. 配置项说明 ###2.1 multiline.pattern 指定正则表达式。匹配的行被视为前一行的延续,其他行视为起始行。

与logstash的正则表达式有所不同。filebeat支持的正则表达式https://www.elastic.co/guide/en/beats/filebeat/6.8/regexp-support.html

###2.2 multiline.negate 定义是否为否定模式。 默认为false,匹配的行会被视为前一行的续行,不匹配的视为多行事件的开始 设置为true 匹配的行被视为多行事件的开始,不匹配的行视为前一行的续行 可以看2.3中的图,有助于理解。

###2.3 multiline.match 设置匹配到的内容附加的位置。插入到前一行还是追加到后一行。before 或 after。

46580-q1fxvu7j4u9.png
46580-q1fxvu7j4u9.png

上图为个人理解。不一定对。

###2.4 multiline.flush_pattern 指定一个正则表达式,用来结束多行事件。

###2.5 multiline.max_lines 如果多行消息包含的行数超过max_lines,则将删除所有其他行。默认值为500。

###2.6 multiline.timeout 在指定的时间后,指定的正则即使没有启动新事件,Filebeat也会发送多行事件。默认值为5s。

三、例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
filebeat.inputs:
  - type: log
    paths:
      - /var/log/test.log
    multiline.pattern: '^\d{4}-\d{2}-\d{2}'
    multiline.negate: true
    multiline.match: after

output.elasticsearch:
  hosts: ["es-01:9200", "es-02:9200", "es-03:9200"]

解析:将所有以日期(xxxx-xx-xx)开头的行,作为多行事件的开始。直至遇到下一个多行事件时结束,或者等待multiline.timeout时间 例如下面的日志会被解析成4条日志:

1
2
3
4
5
6
7
8
9
2021-03-18 17:54:20.848 DEBUG 123521 --- [  XNIO-1 task-2] o.s.s.m.ResBagRelationM
2021-03-18 17:54:20.849  INFO 123521 --- [  XNIO-1 task-3] o.s.core.boot

================  Response Start  ================
===Result===  {"code":200}
<=== GET: /xixxxnfos (6 ms)
================  Response End   ================
2021-03-18 17:54:20.849  INFO 123521 --- [  XNIO-1 task-3] o.s.core.boot
2021-03-18 17:54:20.849  INFO 123521 --- [  XNIO-1 task-3] o.s.core.boot

官方给的其他例子 https://www.elastic.co/guide/en/beats/filebeat/6.8/_examples_of_multiline_configuration.html

请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%