If then else 不能在 FileBeat 处理器中工作
If then else not working in FileBeat processor
我正在尝试在 filebeat.yml 中设置一些处理器以在发送到 ELK 之前处理一些日志。
处理的一个重要部分是确定事件的“级别”,它并不总是包含在日志文件的行中。
这是我现在的想法:
# /var/log/messages
- type: log
processors:
- dissect:
tokenizer: "%{month} %{day} %{time} %{hostname} %{service}: {%message}"
field: "message"
target_prefix: "dissect"
- if:
when:
regexp:
message: ((E|e)rror|(f|F)ault)
then:
- add_fields:
target: 'dissect'
fields:
level: error
else:
- if:
when:
regexp:
message: (W|W)arning
then:
- add_fields:
target: 'dissect'
fields:
level: warning
else:
- add_fields:
target: 'dissect'
fields:
level: information
- drop_fields:
#duplicate
fields: ["dissect.month","dissect.day","dissect.time","dissect.hostname","message"]
# Change to true to enable this input configuration.
enabled: true
paths:
- /var/log/messages
我仍然不确定我正在尝试的那些模式...但现在我不认为它们是导致我失败的原因。
当尝试 运行 filebeat 与控制台输出进行测试
filebeat -e -c filebeat.yml
我收到以下错误:
2022-01-26T17:45:27.174+0200 ERROR instance/beat.go:877 Exiting: Error while initializing input: failed to make if/then/else processor: missing or invalid condition
Exiting: Error while initializing input: failed to make if/then/else processor: missing or invalid condition
总的来说,我对 yaml 还很陌生,我之前唯一做过的其他节拍是 AuditBeat(它有效,并且有条件,但没有“如果”)。
有谁知道可能是什么问题?
澄清一下:我注释掉了所有其他“输入”条目,只留下这个条目,但仍然出现此错误。
编辑:版本:7.2.0
if-then-else
处理器的 if
部分不使用 when
标签来引入条件。正确的用法是:
- if:
regexp:
message: [...]
您必须更正配置中的两个 if
处理器。
此外,您的 dissect 表达式有误。 {%message}
应该是 %{message}
。此外,警告的正则表达式应该是 (W|w)arning
而不是 (W|W)arning
(两个 W 在您的配置中都是大写的)。
这是更正后的处理器配置:
processors:
- dissect:
tokenizer: "%{month} %{day} %{time} %{hostname} %{service}: %{message}"
field: "message"
target_prefix: "dissect"
- if:
regexp:
message: ((E|e)rror|(f|F)ault)
then:
- add_fields:
target: 'dissect'
fields:
level: error
else:
- if:
regexp:
message: (W|w)arning
then:
- add_fields:
target: 'dissect'
fields:
level: warning
else:
- add_fields:
target: 'dissect'
fields:
level: information
我正在尝试在 filebeat.yml 中设置一些处理器以在发送到 ELK 之前处理一些日志。
处理的一个重要部分是确定事件的“级别”,它并不总是包含在日志文件的行中。
这是我现在的想法:
# /var/log/messages
- type: log
processors:
- dissect:
tokenizer: "%{month} %{day} %{time} %{hostname} %{service}: {%message}"
field: "message"
target_prefix: "dissect"
- if:
when:
regexp:
message: ((E|e)rror|(f|F)ault)
then:
- add_fields:
target: 'dissect'
fields:
level: error
else:
- if:
when:
regexp:
message: (W|W)arning
then:
- add_fields:
target: 'dissect'
fields:
level: warning
else:
- add_fields:
target: 'dissect'
fields:
level: information
- drop_fields:
#duplicate
fields: ["dissect.month","dissect.day","dissect.time","dissect.hostname","message"]
# Change to true to enable this input configuration.
enabled: true
paths:
- /var/log/messages
我仍然不确定我正在尝试的那些模式...但现在我不认为它们是导致我失败的原因。
当尝试 运行 filebeat 与控制台输出进行测试
filebeat -e -c filebeat.yml
我收到以下错误:
2022-01-26T17:45:27.174+0200 ERROR instance/beat.go:877 Exiting: Error while initializing input: failed to make if/then/else processor: missing or invalid condition
Exiting: Error while initializing input: failed to make if/then/else processor: missing or invalid condition
总的来说,我对 yaml 还很陌生,我之前唯一做过的其他节拍是 AuditBeat(它有效,并且有条件,但没有“如果”)。 有谁知道可能是什么问题?
澄清一下:我注释掉了所有其他“输入”条目,只留下这个条目,但仍然出现此错误。
编辑:版本:7.2.0
if-then-else
处理器的 if
部分不使用 when
标签来引入条件。正确的用法是:
- if:
regexp:
message: [...]
您必须更正配置中的两个 if
处理器。
此外,您的 dissect 表达式有误。 {%message}
应该是 %{message}
。此外,警告的正则表达式应该是 (W|w)arning
而不是 (W|W)arning
(两个 W 在您的配置中都是大写的)。
这是更正后的处理器配置:
processors:
- dissect:
tokenizer: "%{month} %{day} %{time} %{hostname} %{service}: %{message}"
field: "message"
target_prefix: "dissect"
- if:
regexp:
message: ((E|e)rror|(f|F)ault)
then:
- add_fields:
target: 'dissect'
fields:
level: error
else:
- if:
regexp:
message: (W|w)arning
then:
- add_fields:
target: 'dissect'
fields:
level: warning
else:
- add_fields:
target: 'dissect'
fields:
level: information