定义处理器编辑

您可以使用处理器在将数据发送到配置的输出之前对其进行过滤和增强。要定义处理器,您需要指定处理器名称、可选条件和一组参数。

processors:
  - <processor_name>:
      when:
        <condition>
      <parameters>

  - <processor_name>:
      when:
        <condition>
      <parameters>

...

其中:

  • <processor_name> 指定执行某种操作的 处理器,例如选择要导出的字段或向事件添加元数据。
  • <condition> 指定可选的 条件。如果存在条件,则仅当满足条件时才执行操作。如果未设置条件,则始终执行操作。
  • <parameters> 是要传递给处理器的参数列表。

可以使用 if-then-else 处理器配置来完成更复杂的条件处理。这允许根据单个条件执行多个处理器。

processors:
  - if:
      <condition>
    then: 
      - <processor_name>:
          <parameters>
      - <processor_name>:
          <parameters>
      ...
    else: 
      - <processor_name>:
          <parameters>
      - <processor_name>:
          <parameters>
      ...

then 必须包含一个处理器或一个或多个处理器列表,以便在条件评估为 true 时执行。

else 是可选的。它可以包含一个处理器或一个处理器列表,以便在条件评估为 false 时执行。

处理器在哪些情况下有效?编辑

处理器在以下情况下有效:

  • 在配置的顶层。该处理器将应用于 Packetbeat 收集的所有数据。
  • 在特定协议下。该处理器将应用于为该协议收集的数据。

    packetbeat.protocols:
    - type: <protocol_type>
      processors:
        - <processor_name>:
            when:
              <condition>
            <parameters>
  • packetbeat.flows 下。该处理器将应用于 网络流 中的数据。

    packetbeat.flows:
      processors:
        - <processor_name>:
            when:
              <condition>
            <parameters>

条件编辑

每个条件都会接收一个字段进行比较。您可以通过在字段之间使用 AND(例如,field1 AND field2)来指定同一条件下的多个字段。

对于每个字段,您可以指定一个简单的字段名称或一个嵌套映射,例如 dns.question.name

请参阅 导出字段 以获取 Packetbeat 导出的所有字段的列表。

支持的条件如下:

equals编辑

使用 equals 条件,您可以比较字段是否具有某个值。该条件仅接受整数或字符串值。

例如,以下条件检查 HTTP 事务的响应代码是否为 200。

equals:
  http.response.code: 200
contains编辑

contains 条件检查值是否为字段的一部分。该字段可以是字符串或字符串数组。该条件仅接受字符串值。

例如,以下条件检查错误是否是事务状态的一部分。

contains:
  status: "Specific error"
regexp编辑

regexp 条件根据正则表达式检查字段。该条件仅接受字符串。

例如,以下条件检查进程名称是否以 foo 开头。

regexp:
  system.process.name: "^foo.*"
range编辑

range 条件检查字段是否在某个值范围内。该条件支持 ltltegtgte。该条件仅接受整数、浮点数或可以转换为其中任何一种类型的字符串作为值。

例如,以下条件通过将 http.response.code 字段与 400 进行比较来检查失败的 HTTP 事务。

range:
  http.response.code:
    gte: 400

这也可以写成:

range:
  http.response.code.gte: 400

以下条件检查 CPU 使用率(百分比)的值是否介于 0.5 和 0.8 之间。

range:
  system.cpu.user.pct.gte: 0.5
  system.cpu.user.pct.lt: 0.8
network编辑

network 条件检查字段是否在某个 IP 网络范围内。支持 IPv4 和 IPv6 地址。可以使用 CIDR 表示法(如“192.0.2.0/24”或“2001:db8::/32”)或使用以下命名范围之一来指定网络范围:

  • loopback - 匹配 127.0.0.0/8::1/128 范围内的环回地址。
  • unicast - 匹配 RFC 1122、RFC 4632 和 RFC 4291 中定义的全局单播地址,但 IPv4 广播地址 (255.255.255.255) 除外。这包括私有地址范围。
  • multicast - 匹配多播地址。
  • interface_local_multicast - 匹配 IPv6 接口本地多播地址。
  • link_local_unicast - 匹配链路本地单播地址。
  • link_local_multicast - 匹配链路本地多播地址。
  • private - 匹配 RFC 1918 (IPv4) 和 RFC 4193 (IPv6) 中定义的私有地址范围。
  • public - 匹配非环回、未指定、IPv4 广播、链路本地单播、链路本地多播、接口本地多播或私有地址。
  • unspecified - 匹配未指定的地址(IPv4 地址“0.0.0.0”或 IPv6 地址“::”)。

如果 source.ip 值在私有地址空间内,则以下条件返回 true。

network:
  source.ip: private

如果 destination.ip 值在 192.168.1.0 - 192.168.1.255 的 IPv4 范围内,则此条件返回 true。

network:
  destination.ip: '192.168.1.0/24'

destination.ip 在任何给定子网内时,此条件返回 true。

network:
  destination.ip: ['192.168.1.0/24', '10.0.0.0/8', loopback]
has_fields编辑

has_fields 条件检查事件中是否存在所有给定字段。该条件接受一个字符串值列表,表示字段名称。

例如,以下条件检查事件中是否存在 http.response.code 字段。

has_fields: ['http.response.code']
or编辑

or 运算符接收一个条件列表。

or:
  - <condition1>
  - <condition2>
  - <condition3>
  ...

例如,要配置条件 http.response.code = 304 OR http.response.code = 404

or:
  - equals:
      http.response.code: 304
  - equals:
      http.response.code: 404
and编辑

and 运算符接收一个条件列表。

and:
  - <condition1>
  - <condition2>
  - <condition3>
  ...

例如,要配置条件 http.response.code = 200 AND status = OK

and:
  - equals:
      http.response.code: 200
  - equals:
      status: OK

要配置类似于 <condition1> OR <condition2> AND <condition3> 的条件:

or:
  - <condition1>
  - and:
    - <condition2>
    - <condition3>
not编辑

not 运算符接收要否定的条件。

not:
  <condition>

例如,要配置条件 NOT status = OK

not:
  equals:
    status: OK