Watcher 搜索载荷转换

编辑

载荷转换会在集群上执行搜索,并将 Watch 执行上下文中当前的载荷替换为返回的搜索响应。以下代码片段展示了如何在 Watch 级别定义一个简单的搜索转换。

{
  "transform" : {
    "search" : {
      "request" : {
        "body" : { "query" : { "match_all" : {} }}
      }
    }
  }
}

与任何其他基于搜索的构造一样,可以利用 Elasticsearch 支持的完整搜索 API。例如,以下搜索载荷转换会在所有事件索引中执行搜索,匹配具有 error 优先级的事件。

{
  "transform" : {
    "search" : {
      "request" : {
        "indices" : [ "events-*" ],
        "body" : {
          "size" : 0,
          "query" : {
            "match" : { "priority" : "error"}
          }
        }
      }
    }
  }
}

下表列出了搜索载荷转换的所有可用设置

表 90. 搜索载荷转换设置

名称 必需 默认值 描述

request.search_type

query_then_fetch

搜索类型

request.indices

所有索引

要搜索的一个或多个索引。

request.body

match_all 查询

请求的主体。请求主体遵循您通常在 REST _search 请求的主体中发送的相同结构。主体可以是静态文本,也可以包含 mustache 模板

request.indices_options.expand_wildcards

open

确定如何扩展索引通配符。一个由 openclosedhidden 组合组成的数组。也可以使用 noneall 的值。(请参阅 多目标语法)

request.indices_options.ignore_unavailable

true

一个布尔值,确定搜索是否应宽松地忽略不可用的索引 (请参阅 多目标语法)

request.indices_options.allow_no_indices

true

一个布尔值,确定当未解析任何索引时,搜索是否应宽松地返回无结果(请参阅多目标语法

request.template

-

搜索模板的主体。有关更多信息,请参阅 配置模板

timeout

30秒

等待搜索 API 调用返回的超时时间。如果在此时限内未返回任何响应,则搜索载荷转换超时并失败。此设置将覆盖默认超时时间。

模板支持

编辑

搜索载荷转换支持 mustache 模板。这可以是主体定义的一部分,也可以指向现有模板(在文件中定义或作为脚本存储在 Elasticsearch 中)。

例如,以下代码片段显示了一个引用 Watch 计划时间的搜索

{
  "transform" : {
    "search" : {
      "request" : {
        "indices" : [ "logstash-*" ],
        "body" : {
          "size" : 0,
          "query" : {
            "bool" : {
              "must" : {
                "match" : { "priority" : "error"}
              },
              "filter" : [
                {
                  "range" : {
                    "@timestamp" : {
                      "gte" : "{{ctx.trigger.scheduled_time}}||-30s",
                      "lte" : "{{ctx.trigger.triggered_time}}"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

模板的模型是提供的 template.params 设置与标准 Watch 执行上下文模型之间的联合。

以下是使用引用提供参数的模板的示例

{
  "transform" : {
    "search" : {
      "request" : {
        "indices" : [ "logstash-*" ],
        "template" : {
          "source" : {
            "size" : 0,
            "query" : {
              "bool" : {
                "must" : {
                  "match" : { "priority" : "{{priority}}"}
                },
                "filter" : [
                  {
                    "range" : {
                      "@timestamp" : {
                        "gte" : "{{ctx.trigger.scheduled_time}}||-30s",
                        "lte" : "{{ctx.trigger.triggered_time}}"
                      }
                    }
                  }
                ]
              }
            },
            "params" : {
              "priority" : "error"
            }
          }
        }
      }
    }
  }
}