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