正在加载

创建 Elasticsearch 查询规则

注意

需要 Editor 角色或更高权限才能创建 Elasticsearch 查询规则。要了解更多信息,请参阅 分配用户角色和权限

Elasticsearch 查询规则类型运行用户配置的查询,将匹配数与配置的阈值进行比较,并在满足阈值条件时安排操作运行。

  1. 要访问此页面,请从您的项目中转到警报
  2. 单击管理规则创建规则
  3. 选择规则类型下,选择 Elasticsearch 查询

可以使用 Elasticsearch 查询领域特定语言 (DSL)、Elasticsearch 查询语言 (ES|QL)、Kibana 查询语言 (KQL) 或 Lucene 定义 Elasticsearch 查询规则。

创建 Elasticsearch 查询规则时,您选择的查询类型会影响您必须提供的信息。 例如

Define the condition to detect
  1. 定义您的查询

    如果您使用 查询 DSL,则必须选择索引和时间字段,然后提供您的查询。 仅使用 `query`、`fields`、`_source` 和 `runtime_mappings` 字段,不考虑其他 DSL 字段。 例如

    {
      "query":{
        "match_all" : {}
      }
    }
    

    如果您使用 KQLLucene,则必须指定数据视图,然后定义基于文本的查询。 例如,`http.request.referrer: "https://example.com"`。

    如果您使用 ES|QL,您必须提供源命令,后跟一系列可选的处理命令,并用管道字符 (|) 分隔。 例如

    FROM kibana_sample_data_logs
    | STATS total_bytes = SUM(bytes) BY host
    | WHERE total_bytes > 200000
    | SORT total_bytes DESC
    | LIMIT 10
    
  2. 如果您使用查询 DSL、KQL 或 Lucene,请设置组和阈值。

    何时
    指定如何计算与阈值比较的值。 该值是通过聚合时间窗口内的数字字段来计算的。 聚合选项包括:`count`、`average`、`sum`、`min` 和 `max`。 使用 `count` 时,将使用文档计数,并且不需要聚合字段。
    覆盖或分组覆盖
    指定是将聚合应用于所有文档,还是使用最多四个分组字段拆分为组。 如果选择使用分组,则它是 termsmulti terms aggregation;当满足条件时,将为每组唯一值创建一个警报。 为了限制高基数字段上的警报数量,您必须指定要针对阈值检查的组数。 仅检查顶部组。
    阈值

    定义一个阈值和一个比较运算符(`高于`、`高于或等于`、`低于`、`低于或等于` 或 `介于`)。 将聚合计算的值与此阈值进行比较。

  3. 设置时间窗口,该窗口定义搜索文档的追溯范围。

  4. 如果您使用查询 DSL、KQL 或 Lucene,请设置满足阈值条件时要发送到配置的操作的文档数量。

  5. 如果您使用查询 DSL、KQL 或 Lucene,请选择是否通过排除上一次运行中的匹配项来避免警报重复。 当您使用分组字段时,此选项不可用。

  6. 设置检查间隔,该间隔定义评估规则条件的频率。 通常,此值应设置为小于时间窗口的值,以避免检测中的间隙。

使用测试查询功能来验证您的查询是否有效。

如果您使用查询 DSL、KQL 或 Lucene,则查询会针对使用配置的时间窗口选择的索引运行。 将显示与查询匹配的文档数量。 例如

Test {{es}} query returns number of matches when valid

如果您使用 ES|QL 查询,则会显示一个表。 例如

Test ES|QL query returns a table when valid

如果查询无效,则会发生错误。

您可以选择在满足规则条件时以及不再满足规则条件时发送通知。 特别是,此规则类型支持

  • 警报摘要
  • 在查询匹配时运行的操作
  • 在不再满足规则条件时运行的恢复操作

对于每个操作,您必须选择一个连接器,该连接器提供服务或第三方集成商的连接信息。

默认情况下,排除先前运行的匹配项已开启,并且该规则会检查多次运行中文档匹配项的重复情况。如果您配置的规则的计划间隔小于时间窗口,并且一个文档在多次运行中与查询匹配,则只会收到一次警报。

该规则使用匹配项的时间戳来避免多次对同一匹配项发出警报。当规则运行时,最新匹配项的时间戳用于评估规则条件。仅考虑先前运行的最新时间戳和当前运行之间的匹配项。

假设您已配置规则每分钟运行一次。该规则使用 1 小时的时间窗口,并检查查询是否有超过 99 个匹配项。Elasticsearch 查询规则类型执行以下操作

运行 1 (0:00) 规则在过去一小时内找到 113 个匹配项:113 > 99 规则处于活动状态,并向用户发出警报。
运行 2 (0:01) 规则在过去一小时内找到 127 个匹配项。其中 105 个匹配项是之前已发出警报的重复项,因此您实际上有 22 个匹配项:22 !> 99 无警报。
运行 3 (0:02) 规则在过去一小时内找到 159 个匹配项。其中 88 个匹配项是之前已发出警报的重复项,因此您实际上有 71 个匹配项:71 !> 99 无警报。
运行 4 (0:03) 规则在过去一小时内找到 190 个匹配项。其中 71 个匹配项是之前已发出警报的重复项,因此您实际上有 119 个匹配项:119 > 99 规则处于活动状态,并向用户发出警报。
© . All rights reserved.