1

我正在尝试在 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

4

1 回答 1

1

if处理器部分if-then-else不使用标签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 
于 2022-01-27T12:08:03.337 回答