获取异常检测作业统计信息 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
(long) 分类试图创建新类别但由于作业已达到 model_memory_limit 而无法创建的次数。 此计数不跟踪哪些特定类别未创建。 因此,您无法使用此值来确定错过的唯一类别数量。
frequent_category_count
(long) 与超过 1% 的分类文档匹配的类别数量。
job_id
(字符串) 异常检测作业的标识符。
log_time
(date) model_size_stats 的时间戳,根据服务器时间。
memory_status

(string) 数学模型的状态,可以是以下值之一

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

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

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

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

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

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

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

响应代码edit

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

示例edit

response = client.ml.get_job_stats(
  job_id: 'low_request_rate'
)
puts 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
      }
    }
  ]
}