执行观察器 API
编辑执行观察器 API编辑
强制执行已存储的观察器。
描述编辑
此 API 可用于在其触发逻辑之外强制执行观察器,或出于调试目的模拟观察器执行。
出于测试和调试目的,您还可以对观察器的运行方式进行细粒度控制。您可以执行观察器而不执行其所有操作,或者通过模拟它们来执行。您还可以通过忽略观察器条件来强制执行,并控制在执行后是否将观察器记录写入观察器历史记录。
内联观察器执行编辑
您可以使用执行 API 通过内联指定观察器定义来执行尚未注册的观察器。这对于在将观察器添加到 Watcher 之前测试和调试它们非常有用。
路径参数编辑
-
<watch_id>
- (可选,字符串)观察器的标识符。
查询参数编辑
-
debug
- (可选,布尔值)定义观察器是否在调试模式下运行。默认值为
false
。
请求正文编辑
此 API 支持以下字段
名称 | 必需 | 默认 | 描述 |
---|---|---|---|
|
否 |
此结构被解析为触发器事件的数据,将在观察器执行期间使用 |
|
|
否 |
false |
设置为 |
|
否 |
null |
如果存在,观察器将使用此对象作为有效负载,而不是执行其自身的输入。 |
|
否 |
null |
确定如何在观察器执行期间处理观察器操作。有关更多信息,请参阅操作执行模式。 |
|
否 |
false |
设置为 |
|
否 |
null |
如果存在,则使用此观察器,而不是请求中指定的观察器。此观察器不会持久保存到索引中,并且不能设置 record_execution。 |
操作执行模式编辑
操作模式定义了在观察器执行期间如何处理操作。操作可以关联五种可能的模式
名称 | 描述 |
---|---|
|
模拟操作执行。每种操作类型都定义了自己的模拟操作模式。例如, |
|
与 |
|
像观察器被其自身触发器触发时那样执行操作。如果观察器的当前状态表明应该限制执行,则可能会限制执行。 |
|
与 |
|
跳过操作,既不执行也不模拟。有效地强制限制操作。 |
安全集成编辑
在您的集群上启用 Elasticsearch 安全功能后,将使用存储观察器的用户的权限执行观察器。如果您的用户被允许读取索引 a
,但不允许读取索引 b
,则在执行观察器期间将应用完全相同的规则集。
使用执行观察器 API 时,将使用调用 API 的用户的授权数据作为基础,而不是存储观察器的用户信息。
示例编辑
以下示例执行 my_watch
观察器
POST _watcher/watch/my_watch/_execute
以下示例显示了执行 my-watch
观察器的综合示例
POST _watcher/watch/my_watch/_execute { "trigger_data" : { "triggered_time" : "now", "scheduled_time" : "now" }, "alternative_input" : { "foo" : "bar" }, "ignore_condition" : true, "action_modes" : { "my-action" : "force_simulate" }, "record_execution" : true }
提供了触发时间和计划时间。 |
|
忽略观察器定义的输入,而是使用提供的输入作为执行有效负载。 |
|
忽略观察器定义的条件,并假定其评估结果为 |
|
强制模拟 |
|
观察器的执行会在观察器历史记录中创建一个观察器记录,并且观察器的限制状态可能会相应更新。 |
以下是输出示例
{ "_id": "my_watch_0-2015-06-02T23:17:55.124Z", "watch_record": { "@timestamp": "2015-06-02T23:17:55.124Z", "watch_id": "my_watch", "node": "my_node", "messages": [], "trigger_event": { "type": "manual", "triggered_time": "2015-06-02T23:17:55.124Z", "manual": { "schedule": { "scheduled_time": "2015-06-02T23:17:55.124Z" } } }, "state": "executed", "status": { "version": 1, "execution_state": "executed", "state": { "active": true, "timestamp": "2015-06-02T23:17:55.111Z" }, "last_checked": "2015-06-02T23:17:55.124Z", "last_met_condition": "2015-06-02T23:17:55.124Z", "actions": { "test_index": { "ack": { "timestamp": "2015-06-02T23:17:55.124Z", "state": "ackable" }, "last_execution": { "timestamp": "2015-06-02T23:17:55.124Z", "successful": true }, "last_successful_execution": { "timestamp": "2015-06-02T23:17:55.124Z", "successful": true } } } }, "input": { "simple": { "payload": { "send": "yes" } } }, "condition": { "always": {} }, "result": { "execution_time": "2015-06-02T23:17:55.124Z", "execution_duration": 12608, "input": { "type": "simple", "payload": { "foo": "bar" }, "status": "success" }, "condition": { "type": "always", "met": true, "status": "success" }, "actions": [ { "id": "test_index", "index": { "response": { "index": "test", "version": 1, "created": true, "result": "created", "id": "AVSHKzPa9zx62AzUzFXY" } }, "status": "success", "type": "index" } ] }, "user": "test_admin" } }
您可以通过将模式名称与操作 ID 相关联来为每个操作设置不同的执行模式
POST _watcher/watch/my_watch/_execute { "action_modes" : { "action1" : "force_simulate", "action2" : "skip" } }
您还可以使用 _all
作为操作 ID 将单个执行模式与观察器中的所有操作相关联
POST _watcher/watch/my_watch/_execute { "action_modes" : { "_all" : "force_execute" } }
以下示例显示了如何内联执行观察器
POST _watcher/watch/_execute { "watch" : { "trigger" : { "schedule" : { "interval" : "10s" } }, "input" : { "search" : { "request" : { "indices" : [ "logs" ], "body" : { "query" : { "match" : { "message": "error" } } } } } }, "condition" : { "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }} }, "actions" : { "log_error" : { "logging" : { "text" : "Found {{ctx.payload.hits.total}} errors in the logs" } } } } }
内联观察器时,此 API 的所有其他设置仍然适用。在以下代码段中,虽然内联观察器定义了一个 compare
条件,但在执行期间将忽略此条件
POST _watcher/watch/_execute { "ignore_condition" : true, "watch" : { "trigger" : { "schedule" : { "interval" : "10s" } }, "input" : { "search" : { "request" : { "indices" : [ "logs" ], "body" : { "query" : { "match" : { "message": "error" } } } } } }, "condition" : { "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }} }, "actions" : { "log_error" : { "logging" : { "text" : "Found {{ctx.payload.hits.total}} errors in the logs" } } } } }