处理器语法

编辑

指定一个或多个处理器的列表

  • 在独立 Elastic Agent 配置文件中配置处理器时,将此列表放在 processors 设置下。
  • 在 Kibana 中使用集成 UI 时,将此列表放在 处理器 字段中。

每个处理器以破折号 (-) 开头,并包含处理器名称、可选的 条件 以及传递给处理器的配置设置。

- <processor_name>:
    when:
      <condition>
    <settings>

- <processor_name>:
    when:
      <condition>
    <settings>

如果指定了 条件,则必须满足该条件才能运行处理器。如果未指定条件,则处理器始终运行。

要实现复杂的条件处理,请使用 if-then-else 处理器配置。此配置允许您根据单个条件运行多个处理器。例如

- if:
    <condition>
  then: 
    - <processor_name>:
        <settings>
    - <processor_name>:
        <settings>
    ...
  else: 
    - <processor_name>:
        <settings>
    - <processor_name>:
        <settings>

then 必须包含单个处理器或将在条件为 true 时执行的处理器列表。

else 是可选的。它可以包含单个处理器或将在条件为 false 时执行的处理器列表。

条件

编辑

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

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

请参阅 集成文档 以获取特定集成创建的所有字段的列表。

支持的条件为

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:
  - <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:
  - <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:
  <condition>

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

not:
  equals:
    status: OK