更新异常检测任务 API
编辑更新异常检测任务 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。建议指定字符串以使其清晰。如果指定字节大小单位为
b
或kb
,并且该数字不等于离散的兆字节数,则将其向下舍入到最接近的 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)高级配置选项,它会影响自动删除此任务的旧模型快照。它指定一个时间段(以天为单位),在此时间段之后,每天仅保留第一个快照。此时间段相对于此任务的最新快照的时间戳。有效值范围为
0
到model_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
。
-
conditions
-
(数组)应用规则时可选的数字条件数组。规则必须具有非空范围或至少一个条件。多个条件与逻辑
AND
组合在一起。条件具有以下属性conditions
的属性-
applies_to
- (字符串)指定条件应用于的结果属性。可用选项为
actual
、typical
、diff_from_typical
、time
。如果您的检测器使用lat_long
、metric
、rare
或freq_rare
函数,则只能指定应用于time
的条件。 -
operator
- (字符串)指定条件运算符。可用选项为
gt
(大于)、gte
(大于或等于)、lt
(小于)和lte
(小于或等于)。 -
value
- (双精度)使用
operator
与applies_to
字段进行比较的值。
-
-
scope
-
(对象)规则适用的序列的可选范围。规则必须具有非空范围或至少一个条件。默认情况下,该范围包括所有序列。允许对也在
by_field_name
、over_field_name
或partition_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 }