获取 Watcher 统计数据 API

编辑

获取 Watcher 统计数据 API

编辑

检索当前的 Watcher 指标。

请求

编辑

GET _watcher/stats

GET _watcher/stats/<metric>

先决条件

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

路径参数

编辑
emit_stacktraces
(可选,布尔值)定义是否为每个正在运行的 Watch 生成堆栈跟踪。默认值为 false
<metric>

(可选,枚举)定义响应中包含哪些其他指标。

current_watches
在响应中包括当前正在执行的 Watch。
queued_watches
在响应中包括已排队等待执行的 Watch。
_all
在响应中包括所有指标。

响应体

编辑

此 API 始终返回基本指标。您可以通过使用 metric 参数检索更多指标。

current_watches

(列表)当前正在执行的 Watch 指标可以深入了解 Watcher 当前正在执行的 Watch。每个当前正在执行的 Watch 都会共享其他信息。此信息包括 watch_id、其执行开始时间及其当前执行阶段。

To include this metric, the `metric` option should be set to `current_watches`
or `_all`. In addition you can also specify the `emit_stacktraces=true`
parameter, which adds stack traces for each watch that is being executed. These
stack traces can give you more insight into an execution of a watch.
queued_watches

(列表)Watcher 会调节 Watch 的执行,使其执行不会给节点及其资源带来过大的压力。如果同时触发的 Watch 过多,并且没有足够的容量来执行所有 Watch,则某些 Watch 会排队等待当前正在执行的 Watch 完成执行。排队的 Watch 指标可以深入了解这些已排队的 Watch。

To include this metric, the `metric` option should include `queued_watches` or
`_all`.

示例

编辑

以下示例调用 stats API 来检索基本指标

resp = client.watcher.stats()
print(resp)
response = client.watcher.stats
puts response
const response = await client.watcher.stats();
console.log(response);
GET _watcher/stats

成功调用会返回类似于以下示例的 JSON 结构

{
   "watcher_state": "started",  
   "watch_count": 1, 
   "execution_thread_pool": {
      "size": 1000, 
      "max_size": 1 
   }
}

Watcher 的当前状态,可以是 startedstartingstopped

当前注册的 Watch 数量。

已触发并当前排队等待执行的 Watch 数量。

执行线程池的最大大小,表示并发执行 Watch 的最大数量。

以下示例将 metric 选项指定为查询字符串参数,并将包含有关当前正在执行的 Watch 的基本指标和指标

resp = client.watcher.stats(
    metric="current_watches",
)
print(resp)
response = client.watcher.stats(
  metric: 'current_watches'
)
puts response
const response = await client.watcher.stats({
  metric: "current_watches",
});
console.log(response);
GET _watcher/stats?metric=current_watches

以下示例将 metric 选项指定为 URL 路径的一部分

resp = client.watcher.stats(
    metric="current_watches",
)
print(resp)
response = client.watcher.stats(
  metric: 'current_watches'
)
puts response
const response = await client.watcher.stats({
  metric: "current_watches",
});
console.log(response);
GET _watcher/stats/current_watches

以下代码段显示了一个成功的 JSON 响应示例,该响应捕获了正在执行的 Watch

{
   "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 当前正在执行的所有 Watch 的列表。当当前没有 Watch 正在执行时,将返回一个空数组。捕获的 Watch 按执行时间降序排序。因此,运行时间最长的 Watch 始终位于顶部。

正在执行的 Watch 的 ID。

Watch 记录的 ID。

触发引擎触发 Watch 的时间。

执行 Watch 的时间。这正好在执行输入之前。

当前 Watch 执行阶段。可以是 inputconditionactionsawaits_executionstartedwatch_transformabortedfinished

以下示例指定 queued_watches 指标选项,并包含基本指标和已排队的 Watch

resp = client.watcher.stats(
    metric="queued_watches",
)
print(resp)
response = client.watcher.stats(
  metric: 'queued_watches'
)
puts response
const response = await client.watcher.stats({
  metric: "queued_watches",
});
console.log(response);
GET _watcher/stats/queued_watches

一个成功的 JSON 响应示例,该响应捕获了正在执行的 Watch

{
   "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" 
         },
      ...
   ]
}

当前已排队等待执行的所有 Watch 的列表。当没有 Watch 排队时,将返回一个空数组。

排队等待执行的 Watch 的 ID。

Watch 记录的 ID。

触发引擎触发 Watch 的时间。

Watch 进入排队状态的时间。