获取整体桶 API

编辑

检索汇总多个异常检测作业的桶结果的整体桶结果。

请求

编辑

GET _ml/anomaly_detectors/<job_id>/results/overall_buckets

GET _ml/anomaly_detectors/<job_id>,<job_id>/results/overall_buckets

GET _ml/anomaly_detectors/_all/results/overall_buckets

先决条件

编辑

需要 monitor_ml 集群权限。此权限包含在 machine_learning_user 内置角色中。

描述

编辑

默认情况下,整体桶的跨度等于指定异常检测作业的最大桶跨度。要覆盖此行为,请使用可选的 bucket_span 参数。要了解有关桶概念的更多信息,请参阅

overall_score 通过组合整体桶跨度内所有桶的分数来计算。首先,计算每个异常检测作业在整体桶中的最大 anomaly_score 。然后,对这些分数的 top_n 取平均值,得出 overall_score。这意味着您可以微调 overall_score,使其对同时检测到异常的作业数量更加或更不敏感。例如,如果将 top_n 设置为 1,则 overall_score 是整体桶中的最大桶分数。或者,如果将 top_n 设置为作业数量,则仅当所有作业在该整体桶中检测到异常时,overall_score 才高。如果设置 bucket_span 参数(设置为大于其默认值的值),则 overall_score 是跨度等于作业最大桶跨度的整体桶的最大 overall_score

路径参数

编辑
<job_id>

(必需,字符串) 异常检测作业的标识符。它可以是作业标识符、组名称、逗号分隔的作业或组列表,或者通配符表达式。

您可以通过使用 _all 或指定 * 作为作业标识符来汇总所有异常检测作业的桶结果。

查询参数

编辑
allow_no_match

(可选,布尔值) 指定请求执行的操作

  • 包含通配符表达式,并且没有匹配的作业。
  • 包含 _all 字符串或没有标识符,并且没有匹配项。
  • 包含通配符表达式,并且只有部分匹配项。

默认值为 true,当没有匹配项时返回一个空的 jobs 数组,当有部分匹配项时返回结果的子集。如果此参数为 false,则当没有匹配项或只有部分匹配项时,请求返回 404 状态代码。

bucket_span
(可选,字符串) 整体桶的跨度。必须大于或等于指定异常检测作业的最大桶跨度,这是默认值。
end
(可选,字符串) 返回时间戳早于此时间的整体桶。默认为 -1,表示未设置,结果不限于特定时间戳。
exclude_interim
(可选,布尔值) 如果为 true,则输出将排除临时整体桶。如果整体桶间隔内的任何作业桶是临时的,则整体桶是临时的。默认为 false,表示包含临时结果。
overall_score
(可选,双精度) 返回整体分数大于或等于此值的整体桶。默认为 0.0
start
(可选,字符串) 返回时间戳晚于此时间的整体桶。默认为 -1,表示未设置,结果不限于特定时间戳。
top_n
(可选,整数) 用于 overall_score 计算的顶部异常检测作业桶分数数量。默认为 1

请求主体

编辑

您还可以在请求主体中指定查询参数(例如 allow_no_matchbucket_span)。

响应主体

编辑

API 返回整体桶对象数组,这些对象具有以下属性

bucket_span
(数字) 桶的长度,以秒为单位。与最长作业的 bucket_span 匹配。
is_interim
(布尔值) 如果为 true,则这是一个临时结果。换句话说,结果是根据部分输入数据计算的。
jobs
(数组) 包含每个 job_idmax_anomaly_score 的对象数组。
overall_score
(数字) 每个作业的最大桶 anomaly_scoretop_n 平均值。
result_type
(字符串) 内部。这始终设置为 overall_bucket
timestamp
(日期) 计算这些结果的桶的开始时间。

示例

编辑
resp = client.ml.get_overall_buckets(
    job_id="job-*",
    overall_score=80,
    start="1403532000000",
)
print(resp)
response = client.ml.get_overall_buckets(
  job_id: 'job-*',
  body: {
    overall_score: 80,
    start: '1403532000000'
  }
)
puts response
const response = await client.ml.getOverallBuckets({
  job_id: "job-*",
  overall_score: 80,
  start: 1403532000000,
});
console.log(response);
GET _ml/anomaly_detectors/job-*/results/overall_buckets
{
  "overall_score": 80,
  "start": "1403532000000"
}

在此示例中,API 返回与指定分数和时间约束匹配的单个结果。overall_score 是最大作业分数,因为未指定时 top_n 默认为 1

{
  "count": 1,
  "overall_buckets": [
    {
      "timestamp" : 1403532000000,
      "bucket_span" : 3600,
      "overall_score" : 80.0,
      "jobs" : [
        {
          "job_id" : "job-1",
          "max_anomaly_score" : 30.0
        },
        {
          "job_id" : "job-2",
          "max_anomaly_score" : 10.0
        },
        {
          "job_id" : "job-3",
          "max_anomaly_score" : 80.0
        }
      ],
      "is_interim" : false,
      "result_type" : "overall_bucket"
    }
  ]
}

下一个示例类似,但这次 top_n 设置为 2

resp = client.ml.get_overall_buckets(
    job_id="job-*",
    top_n=2,
    overall_score=50,
    start="1403532000000",
)
print(resp)
response = client.ml.get_overall_buckets(
  job_id: 'job-*',
  body: {
    top_n: 2,
    overall_score: 50,
    start: '1403532000000'
  }
)
puts response
const response = await client.ml.getOverallBuckets({
  job_id: "job-*",
  top_n: 2,
  overall_score: 50,
  start: 1403532000000,
});
console.log(response);
GET _ml/anomaly_detectors/job-*/results/overall_buckets
{
  "top_n": 2,
  "overall_score": 50.0,
  "start": "1403532000000"
}

请注意 overall_score 现在是如何计算前 2 个作业分数的平均值

{
  "count": 1,
  "overall_buckets": [
    {
      "timestamp" : 1403532000000,
      "bucket_span" : 3600,
      "overall_score" : 55.0,
      "jobs" : [
        {
          "job_id" : "job-1",
          "max_anomaly_score" : 30.0
        },
        {
          "job_id" : "job-2",
          "max_anomaly_score" : 10.0
        },
        {
          "job_id" : "job-3",
          "max_anomaly_score" : 80.0
        }
      ],
      "is_interim" : false,
      "result_type" : "overall_bucket"
    }
  ]
}