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

编辑

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

您的用例可能只需要 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.14.3"
  },
  "inner": {
    "data": "value"
  },
  "input": {
    "type": "log",
  },
  "offset": 55,
  "outer": "value",
  "source": "input.json",
  "type": "log"
}