执行观察器 API编辑

强制执行已存储的观察器。

请求编辑

POST _watcher/watch/<watch_id>/_execute

POST _watcher/watch/_execute

先决条件编辑

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

描述编辑

此 API 可用于在其触发逻辑之外强制执行观察器,或出于调试目的模拟观察器执行。

出于测试和调试目的,您还可以对观察器的运行方式进行细粒度控制。您可以执行观察器而不执行其所有操作,或者通过模拟它们来执行。您还可以通过忽略观察器条件来强制执行,并控制在执行后是否将观察器记录写入观察器历史记录。

内联观察器执行编辑

您可以使用执行 API 通过内联指定观察器定义来执行尚未注册的观察器。这对于在将观察器添加到 Watcher 之前测试和调试它们非常有用。

路径参数编辑

<watch_id>
(可选,字符串)观察器的标识符。

查询参数编辑

debug
(可选,布尔值)定义观察器是否在调试模式下运行。默认值为 false

请求正文编辑

此 API 支持以下字段

名称 必需 默认 描述

trigger_data

此结构被解析为触发器事件的数据,将在观察器执行期间使用

ignore_condition

false

设置为 true 时,观察器执行使用始终条件。这也可以作为 HTTP 参数指定。

alternative_input

null

如果存在,观察器将使用此对象作为有效负载,而不是执行其自身的输入。

action_modes

null

确定如何在观察器执行期间处理观察器操作。有关更多信息,请参阅操作执行模式

record_execution

false

设置为 true 时,表示观察器执行结果的观察器记录将持久保存到当前时间的 .watcher-history 索引中。此外,观察器的状态也会更新,可能会限制后续执行。这也可以作为 HTTP 参数指定。

watch

null

如果存在,则使用此观察器,而不是请求中指定的观察器。此观察器不会持久保存到索引中,并且不能设置 record_execution。

操作执行模式编辑

操作模式定义了在观察器执行期间如何处理操作。操作可以关联五种可能的模式

名称 描述

simulate

模拟操作执行。每种操作类型都定义了自己的模拟操作模式。例如,email 操作会创建本来要发送的电子邮件,但实际上并不发送。在这种模式下,如果观察器的当前状态表明应该限制操作,则可能会限制操作。

force_simulate

simulate 模式类似,不同之处在于即使观察器的当前状态表明应该限制操作,也不会限制操作。

execute

像观察器被其自身触发器触发时那样执行操作。如果观察器的当前状态表明应该限制执行,则可能会限制执行。

force_execute

execute 模式类似,不同之处在于即使观察器的当前状态表明应该限制操作,也不会限制操作。

skip

跳过操作,既不执行也不模拟。有效地强制限制操作。

安全集成编辑

在您的集群上启用 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 
}

提供了触发时间和计划时间。

忽略观察器定义的输入,而是使用提供的输入作为执行有效负载。

忽略观察器定义的条件,并假定其评估结果为 true

强制模拟 my-action。强制模拟意味着忽略限制,并且观察器由 Watcher 模拟,而不是正常执行。

观察器的执行会在观察器历史记录中创建一个观察器记录,并且观察器的限制状态可能会相应更新。

以下是输出示例

{
  "_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,因为它将存储在 .watcher-history 索引中。

观察器记录文档,因为它将存储在 .watcher-history 索引中。

观察器执行结果。

用于执行观察器的用户。

您可以通过将模式名称与操作 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"
        }
      }
    }
  }
}