获取异常检测作业统计信息 API

编辑

检索异常检测作业的使用信息。

请求

编辑

GET _ml/anomaly_detectors/<job_id>/_stats

GET _ml/anomaly_detectors/<job_id>,<job_id>/_stats

GET _ml/anomaly_detectors/_stats

GET _ml/anomaly_detectors/_all/_stats

前提条件

编辑

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

描述

编辑

此 API 最多返回 10,000 个作业。

路径参数

编辑
<job_id>
(可选,字符串) 异常检测作业的标识符。它可以是作业标识符、组名称或通配符表达式。您可以通过使用组名称、以逗号分隔的作业列表或通配符表达式,在单个 API 请求中获取多个异常检测作业的统计信息。您可以通过使用 _all、指定 * 作为作业标识符或省略标识符来获取所有异常检测作业的统计信息。

查询参数

编辑
allow_no_match

(可选,布尔值) 指定当请求发生以下情况时该如何操作

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

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

响应体

编辑

该 API 返回有关作业操作进度的以下信息

assignment_explanation
(字符串) 仅对于打开的异常检测作业,包含与选择要运行作业的节点相关的消息。
data_counts

(对象) 一个描述作业输入数量和任何相关错误计数的对象。data_count 值是作业生命周期的累积值。如果还原模型快照或删除旧结果,则不会重置作业计数。

data_counts 的属性
bucket_count
(长整型) 作业生成的存储桶结果数。
earliest_record_timestamp
(日期) 时间上最早的输入文档的时间戳。
empty_bucket_count
(长整型) 不包含任何数据的存储桶数量。如果您的数据包含许多空存储桶,请考虑增加 bucket_span 或使用对数据中的间隙具有容忍度的函数,例如 meannon_null_sumnon_zero_count
input_bytes
(长整型) 发布到异常检测作业的输入数据字节数。
input_field_count
(长整型) 发布到异常检测作业的输入文档中的字段总数。此计数包括未在分析中使用的字段。但是,请注意,如果您正在使用数据馈送,它仅从检索的文档中提取所需的字段,然后再将其发布到作业。
input_record_count
(长整型) 发布到异常检测作业的输入文档数。
invalid_date_count
(长整型) 输入文档中缺少日期字段或日期无法解析的文档数。
job_id
(字符串) 异常检测作业的标识符。
last_data_time
(日期) 根据服务器时间,上次分析数据的时间戳。
latest_empty_bucket_timestamp
(日期) 上一个不包含任何数据的存储桶的时间戳。
latest_record_timestamp
(日期) 时间上最新的输入文档的时间戳。
latest_sparse_bucket_timestamp
(日期) 上一个被视为稀疏的存储桶的时间戳。
log_time
(日期) 根据服务器时间,data_counts 的时间戳。
missing_field_count

(长整型) 输入文档中缺少配置为由异常检测作业分析的字段的文档数。仍会处理缺少字段的输入文档,因为可能并非所有字段都丢失。

如果您正在使用数据馈送或以 JSON 格式将数据发布到作业,则较高的 missing_field_count 通常不表示数据问题。它不一定值得关注。

processed_record_count 的值包含此计数。

out_of_order_timestamp_count
(长整型) 时间戳在当前异常检测存储桶偏移量开始之前(由延迟窗口偏移)的输入文档的数量。仅当您使用 发布数据 API 将数据提供给异常检测作业时,此信息才适用。这些无序文档将被丢弃,因为作业要求时序数据按时间顺序升序排列。
processed_field_count
已由异常检测作业处理的所有文档中的字段总数。只有检测器配置对象中指定的字段才会计入此计数。时间戳不包含在此计数中。
processed_record_count
(长整型) 已由异常检测作业处理的输入文档数。此值包括缺少字段的文档,因为它们仍然会被分析。如果您使用数据馈送并在搜索查询中包含聚合,则 processed_record_count 是处理的聚合结果数,而不是 Elasticsearch 文档数。
sparse_bucket_count
(长整型) 与预期的数据点数相比,包含少量数据点的存储桶数量。如果您的数据包含许多稀疏存储桶,请考虑使用更长的 bucket_span
deleting
(布尔值) 指示删除作业的过程正在进行中,但尚未完成。仅在 true 时报告。
forecasts_stats

(对象) 提供有关此作业预测的统计信息的对象。如果未进行任何预测,则会省略某些统计信息。

除非至少有一个预测,否则会省略 memory_bytesrecordsprocessing_time_msstatus 属性。

forecasts_stats 的属性
forecasted_jobs
(长整型) 值 0 表示此作业不存在预测。值 1 表示至少存在一个预测。
memory_bytes
(对象) 与此作业相关的预测的 avgminmaxtotal 内存使用量(以字节为单位)。如果没有预测,则会省略此属性。
records
(对象) 与此作业相关的预测写入的 model_forecast 文档的 avgminmaxtotal 数量。如果没有预测,则会省略此属性。
processing_time_ms
(对象) 与此作业相关的预测的 avgminmaxtotal 运行时(以毫秒为单位)。如果没有预测,则会省略此属性。
status
(对象) 按状态划分的预测计数。例如:{"finished" : 2, "started" : 1}。如果没有预测,则会省略此属性。
total
(长整型) 当前可用于该作业的单独预测数量。值 1 或更大值表示存在预测。
job_id
(字符串) 异常检测作业的标识符。
model_size_stats

(对象) 提供有关模型大小和内容信息的对象。

model_size_stats 的属性
assignment_memory_basis

(字符串) 指示在哪里查找用于决定作业运行位置的内存要求。可能的值为

  • model_memory_limit:作业的内存要求是根据其模型内存将增长到其配置的 analysis_limits 中指定的 model_memory_limit 来计算的。
  • current_model_bytes:作业的内存要求是根据其当前模型内存大小很好地反映其未来大小来计算的。
  • peak_model_bytes:作业的内存要求是根据其峰值模型内存大小很好地反映模型未来大小来计算的。
bucket_allocation_failures_count
(长整型) 由于模型内存不足,新实体在传入数据中的存储桶未被处理的次数。这种情况也由 hard_limit: memory_status 属性值表示。
categorized_doc_count
(长整型) 已分类字段的文档数。
categorization_status

(字符串) 作业的分类状态。包含以下值之一

  • ok:分类执行情况良好(或者根本未使用)。
  • warn:分类检测到类别分布表明输入数据不适合分类。问题可能是只有一个类别、超过 90% 的类别是罕见的、类别数量大于已分类文档数量的 50%、没有频繁匹配的类别,或者超过 50% 的类别已失效。
dead_category_count
(长整型) 由于另一个类别的定义使其成为失效类别的超集,因此分类创建的永远不会再次分配的类别数量。(失效类别是分类没有事先训练的方式的副作用。)
failed_category_count
(长整型) 分类想要创建新类别但由于作业已达到其 model_memory_limit 而无法创建的次数。此计数不会跟踪哪些特定类别未能创建。因此,您不能使用此值来确定错过的唯一类别数。
frequent_category_count
(长整型) 与超过 1% 的已分类文档匹配的类别数。
job_id
(字符串) 异常检测作业的标识符。
log_time
(日期) 根据服务器时间,model_size_stats 的时间戳。
memory_status

(字符串) 数学模型的状态,可以具有以下值之一

  • ok:模型保持在配置值以下。
  • soft_limit:模型使用的内存超过了配置的内存限制的 60%,并且将修剪较旧的未使用模型以释放空间。此外,在分类作业中,将不再存储任何其他类别示例。
  • hard_limit:模型使用的空间超过了配置的内存限制。因此,并非所有传入数据都得到了处理。
model_bytes
(长整型) 模型使用的内存字节数。这是自上次持久化模型以来的最大值。如果作业已关闭,则此值表示最新大小。
model_bytes_exceeded
(长整型)上次分配失败时,内存使用量超出上限的字节数。
model_bytes_memory_limit
(长整型)模型内存使用量的上限,在值增加时进行检查。
peak_model_bytes
(长整型)模型曾经使用的最大内存字节数。
rare_category_count
(长整型)只匹配到一个分类文档的类别数量。
result_type
(字符串)供内部使用。结果的类型。
total_by_field_count
(长整型)模型分析的 by 字段值的数量。此值是作业中所有检测器的累积值。
total_category_count
(长整型)分类创建的类别数量。
total_over_field_count
(长整型)模型分析的 over 字段值的数量。此值是作业中所有检测器的累积值。
total_partition_field_count
(长整型)模型分析的 partition 字段值的数量。此值是作业中所有检测器的累积值。
timestamp
(日期)上次收集模型统计信息时的记录时间戳。
node

(对象)包含运行作业的节点的属性。此信息仅适用于打开的作业。

node 的属性
attributes
(对象)列出节点属性,例如 ml.machine_memoryml.max_open_jobs 设置。
ephemeral_id
(字符串)节点的临时 ID。
id
(字符串)节点的唯一标识符。
name
(字符串)节点名称。
transport_address
(字符串)接受传输 HTTP 连接的主机和端口。
open_time
(字符串)仅对于打开的作业,作业已打开的经过时间。
state

(字符串)异常检测作业的状态,可以是以下值之一

  • closed:作业已成功完成,其模型状态已持久化。作业必须先打开才能接受进一步的数据。
  • closing:作业关闭操作正在进行中,尚未完成。关闭中的作业无法接受进一步的数据。
  • failed:由于错误,作业未成功完成。这种情况可能是由于无效的输入数据、分析期间发生的致命错误或外部交互(例如,进程被 Linux 内存不足 (OOM) 终止程序杀死)导致的。如果作业已不可撤销地失败,则必须强制关闭然后删除。如果可以更正数据源,则可以关闭作业,然后再重新打开。
  • opened:作业可用于接收和处理数据。
  • opening:作业打开操作正在进行中,尚未完成。
timing_stats

(对象)一个对象,提供有关此作业的计时方面的统计信息。

timing_stats 的属性
average_bucket_processing_time_ms
(双精度)所有存储桶处理时间的平均值(以毫秒为单位)。
bucket_count
(长整型)已处理的存储桶数量。
exponential_average_bucket_processing_time_ms
(双精度)所有存储桶处理时间的指数移动平均值(以毫秒为单位)。
exponential_average_bucket_processing_time_per_hour_ms
(双精度)在 1 小时时间窗口内计算的存储桶处理时间的指数加权移动平均值(以毫秒为单位)。
job_id
(字符串) 异常检测作业的标识符。
maximum_bucket_processing_time_ms
(双精度)所有存储桶处理时间中的最大值(以毫秒为单位)。
minimum_bucket_processing_time_ms
(双精度)所有存储桶处理时间中的最小值(以毫秒为单位)。
total_bucket_processing_time_ms
(双精度)所有存储桶处理时间的总和(以毫秒为单位)。

响应代码

编辑
404(缺少资源)
如果 allow_no_matchfalse,则此代码表示没有与请求匹配的资源,或者请求只有部分匹配。

示例

编辑
resp = client.ml.get_job_stats(
    job_id="low_request_rate",
)
print(resp)
response = client.ml.get_job_stats(
  job_id: 'low_request_rate'
)
puts response
const response = await client.ml.getJobStats({
  job_id: "low_request_rate",
});
console.log(response);
GET _ml/anomaly_detectors/low_request_rate/_stats

API 返回以下结果

{
  "count" : 1,
  "jobs" : [
    {
      "job_id" : "low_request_rate",
      "data_counts" : {
        "job_id" : "low_request_rate",
        "processed_record_count" : 1216,
        "processed_field_count" : 1216,
        "input_bytes" : 51678,
        "input_field_count" : 1216,
        "invalid_date_count" : 0,
        "missing_field_count" : 0,
        "out_of_order_timestamp_count" : 0,
        "empty_bucket_count" : 242,
        "sparse_bucket_count" : 0,
        "bucket_count" : 1457,
        "earliest_record_timestamp" : 1575172659612,
        "latest_record_timestamp" : 1580417369440,
        "last_data_time" : 1576017595046,
        "latest_empty_bucket_timestamp" : 1580356800000,
        "input_record_count" : 1216
      },
      "model_size_stats" : {
        "job_id" : "low_request_rate",
        "result_type" : "model_size_stats",
        "model_bytes" : 41480,
        "model_bytes_exceeded" : 0,
        "model_bytes_memory_limit" : 10485760,
        "total_by_field_count" : 3,
        "total_over_field_count" : 0,
        "total_partition_field_count" : 2,
        "bucket_allocation_failures_count" : 0,
        "memory_status" : "ok",
        "categorized_doc_count" : 0,
        "total_category_count" : 0,
        "frequent_category_count" : 0,
        "rare_category_count" : 0,
        "dead_category_count" : 0,
        "failed_category_count" : 0,
        "categorization_status" : "ok",
        "log_time" : 1576017596000,
        "timestamp" : 1580410800000
      },
      "forecasts_stats" : {
        "total" : 1,
        "forecasted_jobs" : 1,
        "memory_bytes" : {
          "total" : 9179.0,
          "min" : 9179.0,
          "avg" : 9179.0,
          "max" : 9179.0
        },
        "records" : {
          "total" : 168.0,
          "min" : 168.0,
          "avg" : 168.0,
          "max" : 168.0
        },
        "processing_time_ms" : {
          "total" : 40.0,
          "min" : 40.0,
          "avg" : 40.0,
          "max" : 40.0
        },
        "status" : {
          "finished" : 1
        }
      },
      "state" : "opened",
      "node" : {
        "id" : "7bmMXyWCRs-TuPfGJJ_yMw",
        "name" : "node-0",
        "ephemeral_id" : "hoXMLZB0RWKfR9UPPUCxXX",
        "transport_address" : "127.0.0.1:9300",
        "attributes" : {
          "ml.machine_memory" : "17179869184",
          "xpack.installed" : "true",
          "ml.max_open_jobs" : "512"
        }
      },
      "assignment_explanation" : "",
      "open_time" : "13s",
      "timing_stats" : {
        "job_id" : "low_request_rate",
        "bucket_count" : 1457,
        "total_bucket_processing_time_ms" : 1094.000000000001,
        "minimum_bucket_processing_time_ms" : 0.0,
        "maximum_bucket_processing_time_ms" : 48.0,
        "average_bucket_processing_time_ms" : 0.75085792724777,
        "exponential_average_bucket_processing_time_ms" : 0.5571716855800993,
        "exponential_average_bucket_processing_time_per_hour_ms" : 15.0
      }
    }
  ]
}