观察者API
edit观察者API
edit确认观察 API
edit确认一个观察使您能够手动限制观察操作的执行。
路径参数
edit-
<action_id> - (可选,列表) 一个以逗号分隔的行动ID列表,用于确认。如果你省略这个参数,所有观察的行动都会被确认。
-
<watch_id> - (必需,字符串)监视器的标识符。
示例
edit为了演示,让我们创建一个新的手表:
PUT _watcher/watch/my_watch
{
"trigger" : {
"schedule" : {
"yearly" : { "in" : "february", "on" : 29, "at" : "noon" }
}
},
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
},
"actions": {
"test_index": {
"throttle_period": "15m",
"index": {
"index": "test"
}
}
}
}
当你调用获取观察API时,会返回观察的当前状态及其操作的状态与观察定义:
GET _watcher/watch/my_watch
新创建的监视器的操作状态是 awaits_successful_execution:
{
"found": true,
"_seq_no": 0,
"_primary_term": 1,
"_version": 1,
"_id": "my_watch",
"status": {
"version": 1,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "awaits_successful_execution"
}
}
},
"state": ...
},
"watch": ...
}
当观察执行并且条件匹配时,ack.state 的值会变为 ackable。让我们强制执行观察并再次获取它以检查状态:
POST _watcher/watch/my_watch/_execute
{
"record_execution" : true
}
GET _watcher/watch/my_watch
并且操作现在处于可确认状态:
{
"found": true,
"_id": "my_watch",
"_seq_no": 1,
"_primary_term": 1,
"_version": 2,
"status": {
"version": 2,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "ackable"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
}
}
},
"state": ...,
"execution_state": "executed",
"last_checked": ...,
"last_met_condition": ...
},
"watch": ...
}
现在我们可以承认它:
PUT _watcher/watch/my_watch/_ack/test_index GET _watcher/watch/my_watch
{
"found": true,
"_id": "my_watch",
"_seq_no": 2,
"_primary_term": 1,
"_version": 3,
"status": {
"version": 3,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "acked"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
}
}
},
"state": ...,
"execution_state": "executed",
"last_checked": ...,
"last_met_condition": ...
},
"watch": ...
}
确认一个操作会限制该操作的进一步执行,直到其ack.state被重置为awaits_successful_execution。这种情况发生在观察的条件未满足时(条件评估为false)。
您可以通过将 actions 参数分配为一个以逗号分隔的动作ID列表来确认多个动作:
POST _watcher/watch/my_watch/_ack/action1,action2
要确认一个监视器的所有操作,只需省略 actions 参数:
POST _watcher/watch/my_watch/_ack
响应看起来像是一个获取手表的响应,但只包含状态:
{
"status": {
"state": {
"active": true,
"timestamp": "2015-05-26T18:04:27.723Z"
},
"last_checked": "2015-05-26T18:04:27.753Z",
"last_met_condition": "2015-05-26T18:04:27.763Z",
"actions": {
"test_index": {
"ack" : {
"timestamp": "2015-05-26T18:04:27.713Z",
"state": "acked"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.733Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.773Z",
"successful": true
}
}
},
"execution_state": "executed",
"version": 2
}
}
激活观察API
edit一个监视器可以是活动或非活动的。此API使您能够激活当前处于非活动状态的监视器。
请求
editPUT _watcher/watch/
路径参数
edit-
<watch_id> - (必需,字符串)监视器的标识符。
示例
edit当你调用获取观察API时,不活跃的观察状态会随观察定义一起返回:
GET _watcher/watch/my_watch
{
"found": true,
"_id": "my_watch",
"_seq_no": 0,
"_primary_term": 1,
"_version": 1,
"status": {
"state" : {
"active" : false,
"timestamp" : "2015-08-20T12:21:32.734Z"
},
"actions": ...,
"version": 1
},
"watch": ...
}
您可以通过执行以下API调用来激活手表:
PUT _watcher/watch/my_watch/_activate
手表的新状态作为其整体状态的一部分返回:
{
"status": {
"state" : {
"active" : true,
"timestamp" : "2015-09-04T08:39:46.816Z"
},
"actions": ...,
"version": 1
}
}
停用观察 API
edit一个监视器可以是活动或非活动的。此API使您能够停用当前活动的监视器。
请求
editPUT _watcher/watch/
路径参数
edit-
<watch_id> - (必需,字符串) 监视器的标识符。
示例
edit当你调用获取观察API时,活动观察的状态会与观察定义一起返回:
GET _watcher/watch/my_watch
{
"found": true,
"_id": "my_watch",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"status": {
"state" : {
"active" : true,
"timestamp" : "2015-08-20T12:21:32.734Z"
},
"actions": ...,
"version": 1
},
"watch": ...
}
您可以通过执行以下API调用来停用监视:
PUT _watcher/watch/my_watch/_deactivate
手表的新状态作为其整体状态的一部分返回:
{
"status": {
"state" : {
"active" : false,
"timestamp" : "2015-09-04T08:39:46.816Z"
},
"actions": ...,
"version": 1
}
}
删除观察API
edit从 Watcher 中移除一个监视。
请求
editDELETE _watcher/watch/
描述
edit当手表被移除时,表示该手表在 .watches 索引中的文档将被删除,并且它将永远不会再次运行。
请注意,删除一个观察器不会从观察器历史记录中删除与此观察器相关的任何观察器执行记录。
删除监视器必须仅通过此API完成。不要使用Elasticsearch DELETE Document API直接从.watches索引中删除监视器。当启用了Elasticsearch安全功能时,确保没有向任何人授予对.watches索引的write权限。
路径参数
edit-
<watch_id> - (必需, 字符串) 监视器的标识符。
示例
edit以下示例删除了一个ID为my-watch的监视器:
DELETE _watcher/watch/my_watch
响应:
{
"found": true,
"_id": "my_watch",
"_version": 2
}
执行观察API
edit强制执行一个存储的观察。
描述
edit此API可用于强制执行监视器,而不受其触发逻辑的限制,或用于调试目的模拟监视器的执行。
为了测试和调试目的,您还可以对监视器运行的方式进行精细控制。您可以执行监视器而不执行其所有操作,或者通过模拟它们来执行。您还可以通过忽略监视器条件来强制执行,并控制监视器执行后是否会将记录写入监视器历史记录。
内联监视执行
edit您可以使用 Execute API 来执行尚未注册的监视器,方法是将监视器定义内联指定。这是在将监视器添加到 Watcher 之前进行测试和调试的绝佳工具。
路径参数
edit-
<watch_id> - (可选,字符串)监视器的标识符。
查询参数
edit-
debug -
(可选,布尔值) 定义监视器是否在调试模式下运行。默认值是
false。
请求体
edit此API支持以下字段:
| Name | Required | Default | Description |
|---|---|---|---|
|
否 |
此结构被解析为触发事件的数据,将在监视执行期间使用 |
|
|
否 |
假 |
当设置为 |
|
否 |
空 |
当存在时,手表使用此对象作为有效载荷,而不是执行其自身的输入。 |
|
否 |
空 |
确定如何在监视执行过程中处理监视操作。有关更多信息,请参阅操作执行模式。 |
|
否 |
假 |
当设置为 |
|
否 |
空 |
当存在时,此观察用于替代请求中指定的观察。此观察不会保存到索引中,且无法设置record_execution。 |
操作执行模式
edit操作模式定义了在监视执行期间如何处理操作。一个操作可以与以下五种可能的模式之一相关联:
| Name | Description |
|---|---|
|
操作执行是模拟的。每种操作类型都定义了自己的模拟操作模式。例如, |
|
类似于 |
|
执行操作,就像它被自己的触发器触发时一样执行。如果当前的观察状态表明应该进行限制,执行可能会受到限制。 |
|
类似于 |
|
操作被跳过,不会执行或模拟。 实际上强制操作被限流。 |
安全集成
edit当Elasticsearch安全功能在您的集群上启用时,监视器将使用存储监视器的用户的权限执行。如果您的用户被允许读取索引a,但不允许读取索引b,那么在执行监视器期间将应用完全相同的规则集。
在使用执行观察 API 时,将使用调用 API 的用户的授权数据作为基础,而不是存储观察的用户信息。
示例
edit以下示例执行了 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"
}
}
}
}
}
获取观察API
edit根据其ID检索手表。
请求
editGET _watcher/watch/
路径参数
edit-
<watch_id> - (必需,字符串)监视器的标识符。
示例
edit以下示例获取具有 my_watch id 的监视器:
GET _watcher/watch/my_watch
响应:
{
"found": true,
"_id": "my_watch",
"_seq_no": 0,
"_primary_term": 1,
"_version": 1,
"status": {
"version": 1,
"state": {
"active": true,
"timestamp": "2015-05-26T18:21:08.630Z"
},
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:21:08.630Z",
"state": "awaits_successful_execution"
}
}
}
},
"watch": {
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
},
"trigger": {
"schedule": {
"hourly": {
"minute": [0, 5]
}
}
},
"actions": {
"test_index": {
"index": {
"index": "test"
}
}
}
}
}
获取观察者统计信息 API
edit检索当前的Watcher指标。
路径参数
edit-
emit_stacktraces -
(可选,布尔值) 定义是否为每个正在运行的监视器生成堆栈跟踪。默认值为
false。 -
<metric> -
(可选,枚举)定义在响应中包含哪些附加指标。
-
current_watches - 在响应中包含当前正在执行的监视。
-
queued_watches - 在响应中包含排队等待执行的监视。
-
_all - 在响应中包含所有指标。
-
响应体
edit此API始终返回基本指标。您可以通过使用metric参数来检索更多指标。
-
current_watches -
(列表) 当前执行的监视器指标提供了关于 Watcher 当前正在执行的监视器的洞察。每个正在执行的监视器都会共享额外的信息。这些信息包括
watch_id、执行开始的时间以及当前的执行阶段。要包含此指标,`metric` 选项应设置为 `current_watches` 或 `_all`。此外,您还可以指定 `emit_stacktraces=true` 参数,该参数为每个正在执行的监视器添加堆栈跟踪。这些堆栈跟踪可以为您提供有关监视器执行的更多洞察。
-
queued_watches -
(列表) Watcher 调节了监视的执行,以确保它们的执行不会对节点及其资源造成过大的压力。如果过多的监视同时触发,而没有足够的容量来执行它们,一些监视将被排队,等待当前正在执行的监视完成其执行。排队的监视指标提供了对这些排队监视的洞察。
要包含此指标,`metric` 选项应包含 `queued_watches` 或 `_all`。
示例
edit以下示例调用 stats API 以检索基本指标:
GET _watcher/stats
成功的调用将返回类似于以下示例的JSON结构:
{
"watcher_state": "started",
"watch_count": 1,
"execution_thread_pool": {
"size": 1000,
"max_size": 1
}
}
|
当前观察器的状态,可以是 |
|
|
当前注册的监视器数量。 |
|
|
已触发的监视器数量,目前正在排队等待执行。 |
|
|
执行线程池的最大大小,表示并发执行的最大监视器数量。 |
以下示例将 metric 选项指定为查询字符串参数,并将包含基本指标和关于当前执行的监视器的指标:
GET _watcher/stats?metric=current_watches
以下示例将 metric 选项指定为 URL 路径的一部分:
GET _watcher/stats/current_watches
以下代码片段展示了一个成功捕获正在执行的监视器的JSON响应示例:
{
"watcher_state": "started",
"watch_count": 2,
"execution_thread_pool": {
"queue_size": 1000,
"max_size": 20
},
"current_watches": [
{
"watch_id": "slow_condition",
"watch_record_id": "slow_condition_3-2015-05-13T07:42:32.179Z",
"triggered_time": "2015-05-12T11:53:51.800Z",
"execution_time": "2015-05-13T07:42:32.179Z",
"execution_phase": "condition"
}
]
}
|
当前由 Watcher 执行的所有监视列表。 当没有监视正在执行时,返回一个空数组。捕获的监视按执行时间降序排序。因此,运行时间最长的监视始终位于顶部。 |
|
|
正在执行的监视器的ID。 |
|
|
监视记录的ID。 |
|
|
触发器引擎触发监视器的时间。 |
|
|
执行观察的时间。这是在输入被执行之前。 |
|
|
当前的观察执行阶段。可以是 |
以下示例指定了queued_watches指标选项,并包含了基本指标和排队监视器:
GET _watcher/stats/queued_watches
一个成功捕获执行中的观察的JSON响应示例:
{
"watcher_state": "started",
"watch_count": 10,
"execution_thread_pool": {
"queue_size": 1000,
"max_size": 20
},
"queued_watches": [
{
"watch_id": "slow_condition4",
"watch_record_id": "slow_condition4_223-2015-05-21T11:59:59.811Z",
"triggered_time": "2015-05-21T11:59:59.811Z",
"execution_time": "2015-05-21T11:59:59.811Z"
},
...
]
}
查询监视器 API
edit检索所有已注册的监视器。
请求
editGET /_watcher/_query/watches
先决条件
edit-
您必须拥有
manage_watcher或monitor_watcher集群权限才能使用此API。更多信息,请参阅安全权限。
以分页方式检索所有手表,并可选择通过查询过滤手表。
此API支持以下字段:
| Name | Required | Default | Description |
|---|---|---|---|
|
否 |
0 |
获取结果的第一个结果的偏移量。需要是非负的。 |
|
否 |
10 |
返回的点击次数。需要是非负数。 |
|
否 |
空 |
可选,查询过滤器以返回的监视。 |
|
否 |
空 |
可选的排序定义。 |
|
否 |
空 |
可选的 search After 用于使用最后一个匹配项的排序值进行分页。 |
请注意,只有 _id 和 metadata.* 字段是可查询或可排序的。
此API返回以下顶级字段:
-
count - 找到的手表总数。
-
watches -
基于
from、size或search_after请求体参数的监视列表。
示例
edit以下示例列出所有存储的监视器:
GET /_watcher/_query/watches
响应:
{
"count": 1,
"watches": [
{
"_id": "my_watch",
"watch": {
"trigger": {
"schedule": {
"hourly": {
"minute": [
0,
5
]
}
}
},
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
},
"actions": {
"test_index": {
"index": {
"index": "test"
}
}
}
},
"status": {
"state": {
"active": true,
"timestamp": "2015-05-26T18:21:08.630Z"
},
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:21:08.630Z",
"state": "awaits_successful_execution"
}
}
},
"version": -1
},
"_seq_no": 0,
"_primary_term": 1
}
]
}
创建或更新观察API
edit在Watcher中注册一个新的监视器或更新现有的监视器。
请求
editPUT _watcher/watch/
描述
edit当一个监视器被注册时,一个新的文档会被添加到.watches索引中,并且它的触发器会立即被注册到相关的触发引擎中。通常对于schedule触发器,调度器就是触发引擎。
您必须使用 Kibana 或此 API 来创建一个监视。不要直接使用 Elasticsearch 索引 API 将监视添加到 .watches 索引中。如果启用了 Elasticsearch 安全功能,请不要给用户在 .watches 索引上的 write 权限。
在添加监视器时,您还可以定义其初始的
活动状态。您可以通过设置active参数来实现。
安全集成
edit当启用了Elasticsearch安全功能时,您的监视只能在存储监视的用户具有权限的索引上进行索引或搜索。如果用户能够读取索引a,但不能读取索引b,那么在执行监视时也是如此。
路径参数
edit-
<watch_id> - (必需,字符串)监视器的标识符。
查询参数
edit-
active -
(可选,布尔值) 定义监视器默认是活动还是非活动状态。
默认值是
true,这意味着监视器默认是活动状态。
请求体
edit一个手表有以下字段:
| Name | Description |
|---|---|
|
定义监视器何时应运行的触发器。 |
|
定义用于加载观察数据的输入的输入。 |
|
定义是否应运行操作的条件。 |
|
如果条件匹配,将运行的操作列表 |
|
处理观察负载以准备观察操作的负载转换。 |
|
将复制到历史记录条目中的元数据json。 |
|
动作运行的最小时间间隔,默认值为5秒。这个默认值可以在配置文件中通过设置 |
|
两次操作运行之间的最小时间(以毫秒为单位)。默认为 |
示例
edit以下示例添加了一个具有 my-watch ID 的监视器,该监视器具有以下特性:
- 监视计划每分钟触发一次。
- 监视搜索输入查找在过去五分钟内发生的任何404 HTTP响应。
- 监视条件检查是否找到了任何搜索命中。
- 当找到时,监视操作会向管理员发送一封电子邮件。
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" : "admin@domain.host.com",
"subject" : "404 recently encountered"
}
}
}
}
当你添加一个监视器时,你还可以定义它的初始
活动状态。你可以通过设置
active 参数来实现。以下命令添加一个监视器并将其默认设置为非活动状态:
PUT _watcher/watch/my-watch?active=false
如果你省略了active参数,监视器默认是激活的。
更新观察者索引设置
edit此API允许用户修改Watcher内部索引(.watches)的设置。仅允许修改部分设置。包括:
-
index.auto_expand_replicas -
index.number_of_replicas
修改 Watcher 设置的示例:
PUT /_watcher/watch/test_watch
{
"trigger": {
"schedule": {
"hourly": {
"minute": [ 0, 5 ]
}
}
},
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
}
}
PUT /_watcher/settings
{
"index.auto_expand_replicas": "0-4"
}
可以使用获取Watcher索引设置 API检索可配置的设置。
获取观察者索引设置
edit此API允许用户检索Watcher内部索引(.watches)的用户可配置设置。只会显示索引设置的一个子集——那些用户可配置的设置。这包括:
-
index.auto_expand_replicas -
index.number_of_replicas
获取 Watcher 设置的示例:
GET /_watcher/settings
可配置的设置可以使用更新 Watcher 索引设置 API 进行修改。