Filebeat - 设置多行配置

Filebeat - Setting up a multiline configuration

我有一个 filebeat 可以读取几种不同的日志格式。

一种工作正常的格式是单行,它作为单个事件发送到 Logstash。 现在,我有另一种格式,它是多行的。我想将其作为单个事件读取并将其发送到 Logstash 进行解析。 这是日志格式示例,有两个事件。

error: I READ THIS. sent payload: [{"key": "values"}]
custom status response: [{"key1": "values"}]
callback headers:  [{"key2": "values"}]
error stack: [ something really bad happened
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)]

error: I AM NOT READING THIS. sent payload: [{"key": "values"}]
custom status response: [{"key1": "values"}]
callback headers:  [{"key2": "values"}]
error stack: [ something really bad happened
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)
    at here loremisptul (/xx/xx/x)]

这是探矿者配置:

- input_type: log
  paths: /Users/xxxxx/Downloads/elk/anotherlog/app.stderr.log
  document_type: logsystemtwo
  multiline.pattern: '`^=[A-Z]+|^$`'
  multiline.negate: true
  multiline.match: after
- input_type: log
  paths: /Users/xxxxx/Downloads/elk/mylogs/access.log*
  document_type: logsystemone

问题出在第一个多行上。它读取第一个事件(我读了这个),但忽略了它的其余部分(我没有读这个)。

我尝试了很多不同的 configurations,但我就是无法读取其他事件。 它总是只发送第一个事件,而忽略其余的。

我知道我也可以在 Logstash 中执行多行,但是根据 documentation 应该避免的。同样在我的例子中,我会避​​免在 Logstash 中这样做,因为我那里已经有非常复杂的结构

我找到了适合我的情况的模式:

- input_type: log
  paths: /Users/xxxxx/Downloads/elk/logs/app.stderr.log
  document_type: error
  multiline.pattern: '^error: '
  multiline.negate: true
  multiline.match: after

想提一下 Filebeat 有一个 playground,它可以帮助制作模式原型。