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,它可以帮助制作模式原型。
我有一个 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,它可以帮助制作模式原型。