创建或更新 Watch API

编辑

在 Watcher 中注册新的 watch 或更新现有的 watch。

请求

编辑

PUT _watcher/watch/<watch_id>

先决条件

编辑
  • 您必须具有 manage_watcher 集群权限才能使用此 API。有关更多信息,请参阅安全权限

描述

编辑

注册 watch 时,代表该 watch 的新文档会添加到 .watches 索引中,并且其触发器会立即在相关的触发器引擎中注册。通常,对于 schedule 触发器,调度器是触发器引擎。

您必须使用 Kibana 或此 API 来创建 watch。不要使用 Elasticsearch 索引 API 直接将 watch 添加到 .watches 索引。如果启用了 Elasticsearch 安全功能,请不要为用户提供对 .watches 索引的 write 权限。

添加 watch 时,您还可以定义其初始活动状态。您可以通过设置 active 参数来实现这一点。

安全集成

编辑

启用 Elasticsearch 安全功能后,您的 watch 只能在存储该 watch 的用户拥有权限的索引上进行索引或搜索。如果用户能够读取索引 a,但不能读取索引 b,则在执行 watch 时也会应用相同的规则。

路径参数

编辑
<watch_id>
(必需,字符串)watch 的标识符。

查询参数

编辑
active
(可选,布尔值)定义 watch 默认是活动还是非活动状态。默认值为 true,这意味着 watch 默认处于活动状态。

请求正文

编辑

一个 watch 具有以下字段

名称 描述

trigger

触发器,定义何时应运行 watch。

input

输入,定义加载 watch 数据所需的输入。

condition

条件,定义是否应运行操作。

actions

如果条件匹配,将运行的操作列表

transform

转换,处理 watch payload 以便为 watch 操作做准备。

metadata

将复制到历史记录条目中的元数据 json。

throttle_period

运行操作之间的最短时间,默认值为 5 秒。可以使用设置 xpack.watcher.throttle.period.default_period 在配置文件中更改此默认值。如果同时指定了此值和 throttle_period_in_millis 参数,则 Watcher 将使用请求中包含的最后一个参数。

throttle_period_in_millis

运行操作之间的最短时间(以毫秒为单位)。默认为 5000。如果同时指定了此值和 throttle_period 参数,则 Watcher 将使用请求中包含的最后一个参数。

示例

编辑

以下示例添加了一个 ID 为 my-watch 的 watch,该 watch 具有以下特性

  • watch 计划每分钟触发一次。
  • watch 搜索输入查找过去五分钟内发生的任何 404 HTTP 响应。
  • watch 条件检查是否找到了任何搜索命中。
  • 当找到时,watch 操作会向管理员发送电子邮件。
resp = client.watcher.put_watch(
    id="my-watch",
    trigger={
        "schedule": {
            "cron": "0 0/1 * * * ?"
        }
    },
    input={
        "search": {
            "request": {
                "indices": [
                    "logstash*"
                ],
                "body": {
                    "query": {
                        "bool": {
                            "must": {
                                "match": {
                                    "response": 404
                                }
                            },
                            "filter": {
                                "range": {
                                    "@timestamp": {
                                        "from": "{{ctx.trigger.scheduled_time}}||-5m",
                                        "to": "{{ctx.trigger.triggered_time}}"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    condition={
        "compare": {
            "ctx.payload.hits.total": {
                "gt": 0
            }
        }
    },
    actions={
        "email_admin": {
            "email": {
                "to": "[email protected]",
                "subject": "404 recently encountered"
            }
        }
    },
)
print(resp)
const response = await client.watcher.putWatch({
  id: "my-watch",
  trigger: {
    schedule: {
      cron: "0 0/1 * * * ?",
    },
  },
  input: {
    search: {
      request: {
        indices: ["logstash*"],
        body: {
          query: {
            bool: {
              must: {
                match: {
                  response: 404,
                },
              },
              filter: {
                range: {
                  "@timestamp": {
                    from: "{{ctx.trigger.scheduled_time}}||-5m",
                    to: "{{ctx.trigger.triggered_time}}",
                  },
                },
              },
            },
          },
        },
      },
    },
  },
  condition: {
    compare: {
      "ctx.payload.hits.total": {
        gt: 0,
      },
    },
  },
  actions: {
    email_admin: {
      email: {
        to: "[email protected]",
        subject: "404 recently encountered",
      },
    },
  },
});
console.log(response);
PUT _watcher/watch/my-watch
{
  "trigger" : {
    "schedule" : { "cron" : "0 0/1 * * * ?" }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : [
          "logstash*"
        ],
        "body" : {
          "query" : {
            "bool" : {
              "must" : {
                "match": {
                   "response": 404
                }
              },
              "filter" : {
                "range": {
                  "@timestamp": {
                    "from": "{{ctx.trigger.scheduled_time}}||-5m",
                    "to": "{{ctx.trigger.triggered_time}}"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
  },
  "actions" : {
    "email_admin" : {
      "email" : {
        "to" : "[email protected]",
        "subject" : "404 recently encountered"
      }
    }
  }
}

添加 watch 时,您还可以定义其初始活动状态。您可以通过设置 active 参数来实现这一点。以下命令添加一个 watch 并将其默认设置为非活动状态

PUT _watcher/watch/my-watch?active=false

如果省略 active 参数,则 watch 默认处于活动状态。