使用处理器过滤和增强数据

编辑

使用处理器过滤和增强数据

编辑

您的用例可能只需要 Filebeat 导出的数据的一个子集,或者您可能需要增强导出的数据(例如,通过添加元数据)。Filebeat 提供了一些用于过滤和增强导出数据的选项。

您可以配置每个输入以包含或排除特定的行或文件。这允许您为每个输入指定不同的过滤条件。为此,您可以在配置文件的 filebeat.inputs 部分下使用 include_linesexclude_linesexclude_files 选项(请参阅 输入)。这种方法的缺点是您需要为所需的每个过滤条件实现一个配置选项。

另一种方法(此处描述的方法)是定义处理器以配置跨 Filebeat 导出所有数据的全局处理。

处理器

编辑

您可以在配置中定义处理器,以便在将事件发送到已配置的输出之前处理事件。libbeat 库为以下方面提供了处理器:

  • 减少导出字段的数量
  • 使用其他元数据增强事件
  • 执行其他处理和解码

每个处理器接收一个事件,对事件应用定义的操作,并返回该事件。如果您定义了一个处理器列表,则它们将按照在 Filebeat 配置文件中定义的顺序执行。

event -> processor 1 -> event1 -> processor 2 -> event2 ...

建议将所有现有字段的删除和重命名作为处理器配置的最后一步执行。这是因为删除或重命名字段可能会删除下一个处理器链中所需的数据,例如,删除 source.ip 字段将删除 community_id 处理器正常运行所需的字段之一。如果需要删除、重命名或覆盖现有事件字段,请确保通过放置在输入配置中定义的处理器列表末尾的相应处理器 (drop_fieldsrenameadd_fields) 来完成。

删除事件示例

编辑

以下配置删除所有 DEBUG 消息。

processors:
  - drop_event:
      when:
        regexp:
          message: "^DBG:"

要删除来自特定日志文件的所有日志消息

processors:
  - drop_event:
      when:
        contains:
          source: "test"

解码 JSON 示例

编辑

在以下示例中,Filebeat 导出的字段包含一个字段 inner,其值为以字符串形式编码的 JSON 对象

{ "outer": "value", "inner": "{\"data\": \"value\"}" }

以下配置解码内部 JSON 对象

filebeat.inputs:
- type: log
  paths:
    - input.json
  json.keys_under_root: true

processors:
  - decode_json_fields:
      fields: ["inner"]

output.console.pretty: true

结果输出如下所示

{
  "@timestamp": "2016-12-06T17:38:11.541Z",
  "beat": {
    "hostname": "host.example.com",
    "name": "host.example.com",
    "version": "8.16.0"
  },
  "inner": {
    "data": "value"
  },
  "input": {
    "type": "log",
  },
  "offset": 55,
  "outer": "value",
  "source": "input.json",
  "type": "log"
}