更新异常检测任务 API

编辑

更新异常检测任务的某些属性。

请求

编辑

POST _ml/anomaly_detectors/<job_id>/_update

前提条件

编辑

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

路径参数

编辑
<job_id>
(必需,字符串)异常检测任务的标识符。

请求正文

编辑

以下属性可以在创建任务后更新

allow_lazy_open

(布尔值)高级配置选项。指定当机器学习节点容量不足以立即将此任务分配给节点时,是否可以打开此任务。默认值为 false;如果无法立即找到具有运行任务容量的机器学习节点,则打开异常检测任务 API将返回错误。但是,这也受集群范围内的 xpack.ml.max_lazy_ml_nodes 设置的约束;请参阅高级机器学习设置。如果此选项设置为 true,则打开异常检测任务 API不会返回错误,并且该任务将在 opening 状态下等待,直到有足够的机器学习节点容量可用。

如果您在更新时任务处于打开状态,则必须停止数据馈送,关闭任务,然后重新打开任务并重新启动数据馈送,以使更改生效。

analysis_limits

(可选,对象)可以应用限制来控制在内存中保存数学模型所需的资源。这些限制是近似值,可以按任务设置。它们不控制其他进程使用的内存,例如 Elasticsearch Java 进程。

您只能在任务关闭时更新 analysis_limits

analysis_limits 的属性
model_memory_limit

(long 或 string)分析处理所需的大致最大内存资源量。一旦接近此限制,数据修剪将变得更加积极。超过此限制后,将不再建模新的实体。在 6.1 及更高版本中创建的任务的默认值为 1024mb。但是,如果 xpack.ml.max_model_memory_limit 设置的值大于 0 且小于 1024mb,则将使用该值。如果未设置 xpack.ml.max_model_memory_limit,但设置了 xpack.ml.use_auto_machine_memory_percent,则默认的 model_memory_limit 将设置为集群中可以分配的最大大小,上限为 1024mb。默认值相对较小,以确保高资源使用是有意识的决定。如果您有预期会分析高基数字段的任务,则可能需要使用更高的值。

从 Elasticsearch 8.10.0 开始,使用新的版本号来跟踪机器学习插件中的配置和状态更改。这个新的版本号与产品版本分离,并将独立递增。

如果指定数字而不是字符串,则假定单位为 MiB。建议指定字符串以使其清晰。如果指定字节大小单位为 bkb,并且该数字不等于离散的兆字节数,则将其向下舍入到最接近的 MiB。最小有效值为 1 MiB。如果指定的值小于 1 MiB,则会发生错误。有关支持的字节大小单位的更多信息,请参阅字节大小单位

如果为 xpack.ml.max_model_memory_limit 设置指定了值,则当您尝试创建 model_memory_limit 值大于该设置值的任务时,会发生错误。有关更多信息,请参阅机器学习设置

  • 您不能将 model_memory_limit 值减小到低于当前使用量。要确定当前使用量,请参考获取任务统计信息 API 中的 model_bytes 值。
  • 如果model_size_stats 对象中的 memory_status 属性的值为 hard_limit,则表示它无法处理某些数据。您可能需要使用增加的 model_memory_limit 重新运行该任务。
background_persist_interval

时间单位)高级配置选项。模型每次定期持久化之间的时间。默认值是一个随机值,介于 3 到 4 小时之间,这避免了所有任务在完全相同的时间持久化。允许的最小值为 1 小时。

对于非常大的模型(数 GB),持久化可能需要 10-20 分钟,因此请不要将 background_persist_interval 值设置得太低。

如果您在更新时任务处于打开状态,则必须停止数据馈送,关闭任务,然后重新打开任务并重新启动数据馈送,以使更改生效。

custom_settings
(对象)高级配置选项。包含有关任务的自定义元数据。例如,它可以包含自定义 URL 信息,如将自定义 URL 添加到机器学习结果中所示。
daily_model_snapshot_retention_after_days

(long)高级配置选项,它会影响自动删除此任务的旧模型快照。它指定一个时间段(以天为单位),在此时间段之后,每天仅保留第一个快照。此时间段相对于此任务的最新快照的时间戳。有效值范围为 0model_snapshot_retention_days。对于新任务,默认值为 1。对于在 7.8.0 版本之前创建的任务,默认值与 model_snapshot_retention_days 匹配。有关更多信息,请参考模型快照

从 Elasticsearch 8.10.0 开始,使用新的版本号来跟踪机器学习插件中的配置和状态更改。这个新的版本号与产品版本分离,并将独立递增。

description
(字符串)任务的描述。
detectors

(数组)检测器更新对象数组。

detectors 的属性
custom_rules

(数组)自定义规则对象数组,使您可以自定义检测器的操作方式。例如,规则可以指示检测器在什么条件下应跳过结果。Kibana 将自定义规则称为任务规则。有关更多示例,请参阅使用自定义规则自定义检测器

custom_rules 的属性
actions

(数组)当规则应用时要触发的一组操作。如果指定了多个操作,则会合并所有操作的效果。可用的操作包括

  • skip_result:将不会创建结果。这是默认值。除非您还指定 skip_model_update,否则模型将像往常一样使用相应的序列值进行更新。
  • skip_model_update:该序列的值将不会用于更新模型。除非您还指定 skip_result,否则将像往常一样创建结果。当某些值预计始终是异常值,并且它们以负面影响其余结果的方式影响模型时,此操作是合适的。
  • force_time_shift:此操作将使异常检测器内部的时间偏移指定的量。这很有用,例如,可以快速适应事先已知的时间调整事件。此操作需要在 params 对象中使用 force_time_shift 参数。
params

(对象)一组参数对象,用于自定义自定义规则操作数组中定义的操作。可用参数(取决于指定的操作)包括:force_time_shift

params 的属性
force_time_shift
(对象)将 time_shift_amount 设置为您希望偏移时间的有符号秒数。
conditions

(数组)应用规则时可选的数字条件数组。规则必须具有非空范围或至少一个条件。多个条件与逻辑 AND 组合在一起。条件具有以下属性

conditions 的属性
applies_to
(字符串)指定条件应用于的结果属性。可用选项为 actualtypicaldiff_from_typicaltime。如果您的检测器使用 lat_longmetricrarefreq_rare 函数,则只能指定应用于 time 的条件。
operator
(字符串)指定条件运算符。可用选项为 gt(大于)、gte(大于或等于)、lt(小于)和 lte(小于或等于)。
value
(双精度)使用 operatorapplies_to 字段进行比较的值。
scope

(对象)规则适用的序列的可选范围。规则必须具有非空范围或至少一个条件。默认情况下,该范围包括所有序列。允许对也在 by_field_nameover_field_namepartition_field_name 中指定的任何字段进行范围限定。要为字段添加范围,请将字段名称作为范围对象中的键添加,并将其值设置为具有以下属性的对象

scope 的属性
filter_id
(字符串)要使用的过滤器的 ID。
filter_type
(字符串)include(该规则适用于过滤器中的值)或 exclude(该规则适用于过滤器中没有的值)。默认为 include
description
(字符串)检测器的描述。例如,低事件率
detector_index

(整数)检测器的唯一标识符。此标识符基于 analysis_config 中检测器的顺序,从零开始。

如果要更新特定的检测器,则必须使用此标识符。但是,您不能更改检测器的 detector_index 值。

groups
(字符串数组)任务组的列表。一个任务可以不属于任何组或属于多个组。
model_plot_config

(对象)此高级配置选项将模型信息与结果一起存储。它提供了对异常检测的更详细的视图。

如果启用模型图,则可能会给系统性能增加相当大的开销;对于具有许多实体的任务来说,这是不可行的。

模型图提供了模型及其边界的简化指示视图。它不显示复杂的特征,例如多变量相关性或多峰数据。因此,有时可能会报告在模型图中看不到的异常。

可以在创建或稍后更新任务时配置模型图配置。如果遇到性能问题,则必须禁用它。

model_plot_config 的属性
annotations_enabled
(布尔值) 如果为 true,则启用对正在分析的每个实体计算和存储模型更改注释。默认为 enabled
已启用
(布尔值) 如果为 true,则启用对正在分析的每个实体计算和存储模型边界。默认情况下,此项未启用。
术语
[预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。 (字符串) 将数据收集限制为此逗号分隔的分区或字段值列表。如果未指定术语或为空字符串,则不应用任何筛选。例如,“CPU,NetworkIn,DiskWrites”。不支持通配符。使用“单个指标查看器”时,只能查看指定的 terms
模型修剪窗口
(时间单位) 高级配置选项。影响在给定时间段内未更新的模型的修剪。该值必须设置为 bucket_span 的倍数。如果设置得太低,可能会从模型中删除重要信息。通常,设置为 30d 或更长时间。如果未设置,则仅当模型内存状态达到软限制或硬限制时才会进行模型修剪。对于在 8.1 及更高版本中创建的作业,默认值为 30d 或 20 倍的 bucket_span,取较大者。
模型快照保留天数
(long) 高级配置选项,影响此作业旧模型快照的自动删除。它指定快照保留的最长时间(以天为单位)。此时间段相对于此作业的最新快照的时间戳。默认值为 10,这意味着删除比最新快照早十天的快照。有关更多信息,请参阅 模型快照
按分区分类

(对象) 与分类如何与分区字段交互相关的设置。

per_partition_categorization 的属性
已启用
(布尔值) 要启用此设置,您还必须在每个使用关键字 mlcategory 的检测器中将 partition_field_name 属性设置为相同的值。否则,作业创建将失败。
在警告时停止
(布尔值) 仅当启用了按分区分类时,才能将此设置设置为 true。如果为 true,则当分类状态更改为 warn 时,分类和随后的异常检测都会停止。此设置使得可以在某些分区中预期分类效果良好,而在其他分区中效果不佳的情况下使用作业;您无需为分类效果不佳的分区永远付出代价。
重新规范化窗口天数
(long) 高级配置选项。随着新数据的出现,应用分数调整的周期。默认值是 30 天或 100 个 bucket_spans 中较长的一个。

如果您在更新时任务处于打开状态,则必须停止数据馈送,关闭任务,然后重新打开任务并重新启动数据馈送,以使更改生效。

结果保留天数
(long) 高级配置选项。结果保留的时间段(以天为单位)。年龄是相对于最新 bucket 结果的时间戳计算的。如果此属性具有非空值,则每天一次在 00:30(服务器时间),从 Elasticsearch 中删除比最新 bucket 结果早指定天数的结果。默认值为 null,这意味着保留所有结果。系统生成的注释也计为用于保留目的的结果;它们在与结果相同的天数后删除。用户添加的注释将永久保留。

示例

编辑
resp = client.ml.update_job(
    job_id="low_request_rate",
    description="An updated job",
    detectors={
        "detector_index": 0,
        "description": "An updated detector description"
    },
    groups=[
        "kibana_sample_data",
        "kibana_sample_web_logs"
    ],
    model_plot_config={
        "enabled": True
    },
    renormalization_window_days=30,
    background_persist_interval="2h",
    model_snapshot_retention_days=7,
    results_retention_days=60,
)
print(resp)
response = client.ml.update_job(
  job_id: 'low_request_rate',
  body: {
    description: 'An updated job',
    detectors: {
      detector_index: 0,
      description: 'An updated detector description'
    },
    groups: [
      'kibana_sample_data',
      'kibana_sample_web_logs'
    ],
    model_plot_config: {
      enabled: true
    },
    renormalization_window_days: 30,
    background_persist_interval: '2h',
    model_snapshot_retention_days: 7,
    results_retention_days: 60
  }
)
puts response
const response = await client.ml.updateJob({
  job_id: "low_request_rate",
  description: "An updated job",
  detectors: {
    detector_index: 0,
    description: "An updated detector description",
  },
  groups: ["kibana_sample_data", "kibana_sample_web_logs"],
  model_plot_config: {
    enabled: true,
  },
  renormalization_window_days: 30,
  background_persist_interval: "2h",
  model_snapshot_retention_days: 7,
  results_retention_days: 60,
});
console.log(response);
POST _ml/anomaly_detectors/low_request_rate/_update
{
  "description":"An updated job",
  "detectors": {
    "detector_index": 0,
    "description": "An updated detector description"
  },
  "groups": ["kibana_sample_data","kibana_sample_web_logs"],
  "model_plot_config": {
    "enabled": true
  },
  "renormalization_window_days": 30,
  "background_persist_interval": "2h",
  "model_snapshot_retention_days": 7,
  "results_retention_days": 60
}

更新异常检测作业时,您会收到作业配置信息的摘要,包括更新的属性值。例如

{
  "job_id" : "low_request_rate",
  "job_type" : "anomaly_detector",
  "job_version" : "8.4.0",
  "create_time" : 1656105950893,
  "finished_time" : 1656105965744,
  "model_snapshot_id" : "1656105964",
  "custom_settings" : {
    "created_by" : "ml-module-sample",
    "custom_urls" : [
      {
        "url_name" : "Raw data",
        "url_value" : "discover#/?_g=(time:(from:'$earliest$',mode:absolute,to:'$latest$'))&_a=(index:'90943e30-9a47-11e8-b64d-95841ca0b247')"
      },
      {
        "url_name" : "Data dashboard",
        "url_value" : "dashboards#/view/edf84fe0-e1a0-11e7-b6d5-4dc382ef7f5b?_g=(time:(from:'$earliest$',mode:absolute,to:'$latest$'))&_a=(filters:!(),query:(language:kuery,query:''))"
      }
    ]
  },
  "groups" : [
    "kibana_sample_data",
    "kibana_sample_web_logs"
  ],
  "description" : "An updated job",
  "analysis_config" : {
    "bucket_span" : "1h",
    "summary_count_field_name" : "doc_count",
    "detectors" : [
      {
        "detector_description" : "An updated detector description",
        "function" : "low_count",
        "detector_index" : 0
      }
    ],
    "influencers" : [ ],
    "model_prune_window" : "30d"
  },
  "analysis_limits" : {
    "model_memory_limit" : "11mb",
    "categorization_examples_limit" : 4
  },
  "data_description" : {
    "time_field" : "timestamp",
    "time_format" : "epoch_ms"
  },
  "model_plot_config" : {
    "enabled" : true,
    "annotations_enabled" : true
  },
  "renormalization_window_days" : 30,
  "background_persist_interval" : "2h",
  "model_snapshot_retention_days" : 7,
  "daily_model_snapshot_retention_after_days" : 1,
  "results_retention_days" : 60,
  "results_index_name" : "custom-low_request_rate",
  "allow_lazy_open" : false
}