如果不在FileBeat处理器中工作



我正在尝试在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处理器。

此外,您的剖析表达式中还有一个错误。{%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 

最新更新