创建异常检测作业 API编辑

实例化异常检测作业。

请求编辑

PUT _ml/anomaly_detectors/<job_id>

先决条件编辑

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

如果包含 datafeed_config,则还必须对源索引具有 read 索引权限。

描述编辑

  • 您必须使用 Kibana 或此 API 创建异常检测作业。请勿使用 Elasticsearch 索引 API 将作业直接放入 .ml-config 索引。如果启用了 Elasticsearch 安全功能,请勿授予用户对 .ml-config 索引的 write 权限。
  • 如果包含 datafeed_config 并且启用了 Elasticsearch 安全功能,则数据馈送会记住创建它时用户拥有的角色,并使用相同的角色运行查询。如果提供辅助授权标头,则将改用这些凭据。

路径参数编辑

<job_id>
(必填,字符串)异常检测作业的标识符。此标识符可以包含小写字母数字字符(a-z 和 0-9)、连字符和下划线。它必须以字母数字字符开头和结尾。

请求正文编辑

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

(必填,对象)分析配置,指定如何分析数据。创建作业后,您将无法更改分析配置;所有属性均为信息性属性。

analysis_config 的属性
bucket_span
时间单位)分析聚合到的时间间隔大小,通常介于 5m1h 之间。此值应为整日数或等于一天中的整数个存储桶; [8.1] 在 8.1 中已弃用。不符合这些建议的值已被弃用,并将在未来版本中被禁止 。如果异常检测作业使用带有聚合的数据馈送,则此值还必须可以被日期直方图聚合的时间间隔整除。默认值为 5m。有关更多信息,请参阅存储桶跨度
categorization_analyzer

(对象或字符串)如果指定了 categorization_field_name,则还可以定义用于解释分类字段的分析器。此属性不能与 categorization_filters 同时使用。分类分析器指定分类过程如何解释 categorization_field。语法与用于在分析端点中定义 analyzer 的语法非常相似。有关更多信息,请参阅对日志消息进行分类

categorization_analyzer 字段可以指定为字符串或对象。如果它是字符串,则它必须引用内置分析器或其他插件添加的分析器。如果它是一个对象,则它具有以下属性

categorization_analyzer 的属性
char_filter
(字符串或对象的数组)一个或多个字符过滤器。除了内置的字符过滤器之外,其他插件还可以提供更多字符过滤器。此属性是可选的。如果未指定,则在分类之前不会应用任何字符过滤器。如果您要自定义分析器的某些其他方面,并且需要实现与 categorization_filters(当自定义分析器的某些其他方面时不允许使用)相同的效果,请在此处将它们添加为模式替换字符过滤器
tokenizer
(字符串或对象)应用字符过滤器后要使用的分词器的名称或定义。如果 categorization_analyzer 指定为对象,则此属性是必需的。机器学习提供了一个名为 ml_standard 的分词器,它的分词方式经确定可以在各种日志文件格式(针对英语日志)上产生良好的分类结果。如果要使用该分词器但要更改字符或标记过滤器,请在 categorization_analyzer 中指定 "tokenizer": "ml_standard"。此外,还可以使用 ml_classic 分词器,它的分词方式与旧版本产品(6.2 之前的版本)中的不可自定义分词器相同。ml_classic 是 6.2 到 7.13 版本中的默认分类分词器,因此,如果需要与在这些版本中创建的作业的默认分类相同,请在 categorization_analyzer 中指定 "tokenizer": "ml_classic"

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

filter
(字符串或对象的数组)一个或多个标记过滤器。除了内置的标记过滤器之外,其他插件还可以提供更多标记过滤器。此属性是可选的。如果未指定,则在分类之前不会应用任何标记过滤器。
categorization_field_name
(字符串)如果指定了此属性,则将对指定字段的值进行分类。生成的类别必须在检测器中使用,方法是将 by_field_nameover_field_namepartition_field_name 设置为关键字 mlcategory。有关更多信息,请参阅对日志消息进行分类
categorization_filters
(字符串数组)如果指定了 categorization_field_name,则还可以定义可选过滤器。此属性需要一个正则表达式数组。这些表达式用于从分类字段值中过滤掉匹配的序列。您可以使用此功能通过在定义类别时排除序列来微调分类。例如,您可以排除日志文件中出现的 SQL 语句。有关更多信息,请参阅对日志消息进行分类。此属性不能与 categorization_analyzer 同时使用。如果只想定义在标记化之前应用的简单正则表达式过滤器,则设置此属性是最简单的方法。如果还想自定义分词器或标记化后过滤,请改用 categorization_analyzer 属性,并将过滤器包含为 pattern_replace 字符过滤器。效果完全相同。
detectors

(数组)检测器配置对象的数组。检测器配置对象指定作业分析哪些数据字段。它们还指定使用哪些分析函数。您可以为一个作业指定多个检测器。

如果 detectors 数组不包含至少一个检测器,则不会进行任何分析,并且会返回错误。

detectors 的属性
by_field_name
(字符串)用于拆分数据的字段。具体来说,此属性用于分析拆分相对于其自身历史记录的情况。它用于在拆分的上下文中查找异常值。
custom_rules

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

custom_rules 的属性
actions

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

  • skip_result:不会创建结果。这是默认值。除非还指定了 skip_model_update,否则模型将照常使用相应的序列值进行更新。
  • skip_model_update:该序列的值将不会用于更新模型。除非还指定了 skip_result,否则结果将照常创建。当某些值预期始终异常并且它们以负面影响其余结果的方式影响模型时,此操作适用。
conditions

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

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

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

scope 的属性
filter_id
(字符串)要使用的过滤器的 ID。
filter_type
(字符串)include(规则适用于过滤器中的值)或 exclude(规则适用于不在过滤器中的值)。默认为 include
detector_description
(字符串)检测器的描述。例如,Low event rate
detector_index

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

如果为此属性指定值,则该值将被忽略。

exclude_frequent
(字符串)包含以下值之一:allnonebyover。如果设置,则排除频繁实体影响异常结果。实体可以被视为随时间推移频繁出现或在总体中频繁出现。如果您同时使用 over 和 by 字段,则可以为这两个字段将 exclude_frequent 设置为 all,或者为这些特定字段设置为 byover
field_name

(字符串)检测器在函数中使用的字段。如果您使用事件频率函数(例如 countrare),请勿指定此字段。

field_name 不能包含双引号或反斜杠。

函数
(字符串)使用的分析函数。例如,countraremeanminmaxsum。有关更多信息,请参阅函数参考
over_field_name
(字符串)用于拆分数据的字段。具体来说,此属性用于分析相对于所有拆分历史记录的拆分。它用于查找所有拆分的总体中的异常值。有关更多信息,请参阅执行总体分析
partition_field_name
(字符串)用于对分析进行分段的字段。使用此属性时,您将为该字段的每个值拥有完全独立的基线。
use_null
(布尔值)定义当 by 或 partition 字段没有值时是否使用新时间序列作为空时间序列。默认值为 false
影响因素
(字符串数组)以逗号分隔的影响因素字段名称列表。通常,这些可以是在检测器配置中使用的 by、over 或 partition 字段。您可能还想使用未在检测器中明确命名的字段名称,但该名称作为输入数据的一部分提供。当您使用多个检测器时,建议使用影响因素,因为它会聚合每个影响因素实体的结果。
延迟

(时间单位)预期数据乱序的时间窗口大小。默认值为 0(无延迟)。如果指定非零值,则该值必须大于或等于一秒。有关时间单位的更多信息,请参阅时间单位

仅当您使用发布数据 API 发送数据时,延迟才适用。

model_prune_window
(可选,时间单位)高级配置选项。影响对在给定时间段内未更新的模型的修剪。该值必须设置为 bucket_span 的倍数。如果设置得太低,可能会从模型中删除重要信息。通常,设置为 30d 或更长时间。如果未设置,则仅当模型内存状态达到软限制或硬限制时才会进行模型修剪。对于在 8.1 及更高版本中创建的作业,默认值为 30d 或 20 倍 bucket_span 中的较大者。
multivariate_by_fields

(布尔值)此功能保留供内部使用。不支持在客户环境中使用,并且不受官方 GA 功能的支持 SLA 的约束。

如果设置为 true,则分析将自动查找给定 by 字段值的指标之间的相关性,并在这些相关性不再成立时报告异常。例如,假设主机 A 上的 CPU 和内存使用率通常与主机 B 上的相同指标高度相关。这种相关性可能是因为它们正在运行负载均衡的应用程序。如果您启用此属性,则当(例如)主机 A 上的 CPU 使用率很高而主机 B 上的 CPU 使用率很低时,将报告异常。也就是说,当主机 A 的 CPU 相对于主机 B 的 CPU 异常时,您会看到异常。

要使用 multivariate_by_fields 属性,您还必须在检测器中指定 by_field_name

per_partition_categorization

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

per_partition_categorization 的属性
已启用
(布尔值)要启用此设置,您还必须在每个使用关键字 mlcategory 的检测器中将 partition_field_name 属性设置为相同的值。否则,作业创建失败。
stop_on_warn
(布尔值)仅当启用了每分区分类时,才能将此设置设置为 true。如果为 true,则分类和后续异常检测将针对分类状态更改为 warn 的分区停止。此设置使得拥有一个作业变得可行,在该作业中,预计分类在某些分区中运行良好,而在其他分区中则不然;您无需为分类效果不佳的分区永远付出代价。
summary_count_field_name

(字符串)如果指定了此属性,则预计馈送到作业的数据已预先汇总。此属性值是包含已汇总的原始数据点计数的字段的名称。相同的 summary_count_field_name 适用于作业中的所有检测器。

summary_count_field_name 属性不能与 metric 函数一起使用。

analysis_limits

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

analysis_limits 的属性
categorization_examples_limit

(长整型)存储在内存和结果数据存储中每个类别的最大示例数。默认值为 4。如果增加此值,则可以使用更多示例,但这需要您有更多可用存储空间。如果将此值设置为 0,则不会存储任何示例。

categorization_examples_limit 仅适用于使用分类的分析。有关更多信息,请参阅对日志消息进行分类

model_memory_limit

(长整型或字符串)分析处理所需的近似最大内存资源量。一旦接近此限制,数据修剪就会变得更加激进。超过此限制后,将不会对新实体建模。对于在 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 值大于该设置值的作业时会发生错误。有关更多信息,请参阅机器学习设置

background_persist_interval

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

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

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

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

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

data_description

(必填,对象)数据描述定义了在使用发布数据 API 将数据发送到作业时输入数据的格式。请注意,使用数据馈送时,只需要设置 time_field,其余属性会自动设置。通过发布数据 API 接收的数据不会存储在 Elasticsearch 中。仅保留异常检测的结果。

data_description 的属性
格式
(字符串)目前仅支持 xcontent 格式,这是默认值。
time_field
(字符串)包含时间戳的字段的名称。默认值为 time
time_format

(字符串)时间格式,可以是 epochepoch_ms 或自定义模式。默认值为 epoch,指的是 UNIX 或 Epoch 时间(自 1970 年 1 月 1 日以来的秒数)。值 epoch_ms 表示时间以自 epoch 以来的毫秒数来衡量。epochepoch_ms 时间格式接受整数或实数值。

自定义模式必须符合 Java DateTimeFormatter 类。使用日期时间格式模式时,建议您提供完整的日期、时间和时区。例如:yyyy-MM-dd'T'HH:mm:ssX。如果指定的模式不足以生成完整的时间戳,则作业创建失败。

datafeed_config

(可选,对象)数据馈送,它从 Elasticsearch 中检索数据以供作业分析。您只能将一个数据馈送与每个异常检测作业相关联。

datafeed 的属性
聚合
(可选,对象)如果设置,则数据馈送执行聚合搜索。对聚合的支持有限,并且仅应与低基数数据一起使用。有关更多信息,请参阅聚合数据以提高性能
chunking_config

(可选,对象)数据馈送可能需要搜索很长一段时间,例如几个月或几年。此搜索被分成多个时间块,以确保对 Elasticsearch 的负载得到管理。分块配置控制如何计算这些时间块的大小,并且是一个高级配置选项。

chunking_config 的属性
模式

(字符串)有三种可用模式

  • auto:动态计算块大小。这是数据馈送不使用聚合时的默认值和建议值。
  • manual:根据指定的 time_span 应用分块。当数据馈送使用聚合时,请使用此模式。
  • off:不应用分块。
time_span
时间单位)每次搜索将查询的时间跨度。此设置仅在模式设置为 manual 时适用。例如:3h
datafeed_id

(可选,字符串)唯一标识数据馈送的数字字符串。此标识符可以包含小写字母数字字符(a-z 和 0-9)、连字符和下划线。它必须以字母数字字符开头和结尾。

默认为与异常检测作业相同的 ID。

delayed_data_check_config

(可选,对象)指定数据馈送是否检查丢失的数据以及窗口的大小。例如:{"enabled": true, "check_window": "1h"}

数据馈送可以选择搜索已读取的索引,以确定是否有任何数据随后添加到索引中。如果发现数据丢失,则表明 query_delay 选项设置得太低,并且数据在数据馈送经过该时间点后才被索引。请参阅处理延迟数据

此检查仅在实时数据馈送上运行。

delayed_data_check_config 的属性
check_window
时间单位)搜索延迟数据的時間窗口。此时间窗口以最新的最终确定的存储桶结束。它默认为 null,这会导致在实时数据馈送运行时计算适当的 check_window。特别是,默认的 check_window 跨度计算基于 2h8 * bucket_span 的最大值。
已启用
(布尔值)指定数据馈送是否定期检查延迟数据。默认为 true
频率
(可选,时间单位)数据馈送实时运行时发出计划查询的时间间隔。默认值是短存储桶跨度的存储桶跨度,或者对于更长的存储桶跨度,是存储桶跨度的合理分数。例如:150s。当 frequency 短于存储桶跨度时,将写入最后一个(部分)存储桶的中间结果,然后最终被完整的存储桶结果覆盖。如果数据馈送使用聚合,则此值必须可以被日期直方图聚合的间隔整除。
索引

(必填,数组)索引名称数组。支持通配符。例如:["it_ops_metrics", "server*"]

如果任何索引位于远程集群中,则机器学习节点需要具有 remote_cluster_client 角色。

indices_options

(可选,对象)指定在搜索期间使用的索引扩展选项。

例如

{
   "expand_wildcards": ["all"],
   "ignore_unavailable": true,
   "allow_no_indices": "false",
   "ignore_throttled": true
}

有关这些选项的更多信息,请参阅多目标语法

max_empty_searches
(可选,整数)如果实时数据馈送从未见过任何数据(包括在任何初始训练期间),那么它将在返回无文档的多次实时搜索后自动停止自身并关闭其关联的作业。换句话说,它将在实时运行 frequency 乘以 max_empty_searches 次后停止。如果未设置,则没有结束时间且看不到数据的 datafeed 将保持启动状态,直到显式停止。默认情况下,不设置此设置。
查询
(可选,对象)Elasticsearch 查询领域特定语言 (DSL)。此值对应于 Elasticsearch 搜索 POST 正文中的查询对象。Elasticsearch 支持的所有选项都可以使用,因为此对象会逐字传递给 Elasticsearch。默认情况下,此属性具有以下值:{"match_all": {"boost": 1}}
query_delay
(可选,时间单位)查询数据落后于实时的时间(以秒为单位)。例如,如果上午 10:04 的数据可能要到上午 10:06 才能在 Elasticsearch 中搜索到,请将此属性设置为 120 秒。默认值是在 60s120s 之间随机选择的。当同一节点上运行多个作业时,这种随机性可以提高查询性能。有关更多信息,请参阅处理延迟数据
runtime_mappings

(可选,对象)指定数据馈送搜索的运行时字段。

例如

{
  "day_of_week": {
    "type": "keyword",
    "script": {
      "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
    }
  }
}
script_fields
(可选,对象)指定用于评估自定义表达式并将脚本字段返回到数据馈送的脚本。作业中的检测器配置对象可以包含使用这些脚本字段的函数。有关更多信息,请参阅使用脚本字段转换数据脚本字段
scroll_size
(可选,无符号整数)当数据馈送不使用聚合时,在 Elasticsearch 搜索中使用的 size 参数。默认值为 1000。最大值为 index.max_result_window 的值,默认值为 10,000。
描述
(可选,字符串)作业的描述。
(可选,字符串数组)作业组列表。一个作业可以不属于任何组,也可以属于多个组。
model_plot_config

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

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

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

模型图配置可以在创建作业时配置,也可以稍后更新。如果遇到性能问题,则必须将其禁用。

model_plot_config 的属性
annotations_enabled
(布尔值)如果为 true,则为每个正在分析的实体启用模型更改注释的计算和存储。默认为 enabled
已启用
(布尔值)如果为 true,则为每个正在分析的实体启用模型边界的计算和存储。默认情况下,未启用此功能。
terms
[预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。 (字符串)将数据收集限制为此逗号分隔的分区列表或按字段值。如果未指定术语或它是空字符串,则不应用过滤。例如,“CPU、NetworkIn、DiskWrites”。不支持通配符。使用单指标查看器时,只能查看指定的 terms
model_snapshot_retention_days
(可选,长整型)高级配置选项,会影响此任务旧模型快照的自动删除。它指定保留快照的最长时间(以天为单位)。此时间段是相对于此任务最新快照的时间戳的。默认值为 10,这意味着将删除比最新快照早十天的快照。有关更多信息,请参阅模型快照
renormalization_window_days
(可选,长整型)高级配置选项。应用分数调整的时间段,因为可以看到新数据。默认值为 30 天或 100 个 bucket_spans 中的较大值。
results_index_name
(可选,字符串)影响机器学习结果索引名称的文本字符串。默认值为 shared,这将生成一个名为 .ml-anomalies-shared 的索引。
results_retention_days
(可选,长整型)高级配置选项。保留结果的时间段(以天为单位)。年龄是相对于最新存储桶结果的时间戳计算的。如果此属性具有非空值,则每天 00:30(服务器时间)会从 Elasticsearch 中删除比最新存储桶结果早指定天数的结果。默认值为 null,这意味着将保留所有结果。系统生成的注释在保留目的方面也被视为结果;它们在与结果相同的天数后被删除。用户添加的注释将永久保留。

示例编辑

创建异常检测作业和数据馈送

PUT _ml/anomaly_detectors/test-job1?pretty
{
  "analysis_config": {
    "bucket_span": "15m",
    "detectors": [
      {
        "detector_description": "Sum of bytes",
        "function": "sum",
        "field_name": "bytes"
      }
    ]
  },
  "data_description": {
    "time_field": "timestamp",
    "time_format": "epoch_ms"
  },
  "analysis_limits": {
    "model_memory_limit": "11MB"
  },
  "model_plot_config": {
    "enabled": true,
    "annotations_enabled": true
  },
  "results_index_name": "test-job1",
  "datafeed_config":
  {
    "indices": [
    "kibana_sample_data_logs"
    ],
    "query": {
      "bool": {
        "must": [
          {
            "match_all": {}
          }
        ]
      }
    },
    "runtime_mappings": {
      "hour_of_day": {
        "type": "long",
        "script": {
          "source": "emit(doc['timestamp'].value.getHour());"
        }
      }
    },
    "datafeed_id": "datafeed-test-job1"
  }
}

API 返回以下结果

{
  "job_id" : "test-job1",
  "job_type" : "anomaly_detector",
  "job_version" : "8.4.0",
  "create_time" : 1656087283340,
  "datafeed_config" : {
    "datafeed_id" : "datafeed-test-job1",
    "job_id" : "test-job1",
    "authorization" : {
      "roles" : [
        "superuser"
      ]
    },
    "query_delay" : "61499ms",
    "chunking_config" : {
      "mode" : "auto"
    },
    "indices_options" : {
      "expand_wildcards" : [
        "open"
      ],
      "ignore_unavailable" : false,
      "allow_no_indices" : true,
      "ignore_throttled" : true
    },
    "query" : {
      "bool" : {
        "must" : [
          {
            "match_all" : { }
          }
        ]
      }
    },
    "indices" : [
      "kibana_sample_data_logs"
    ],
    "scroll_size" : 1000,
    "delayed_data_check_config" : {
      "enabled" : true
    },
    "runtime_mappings" : {
      "hour_of_day" : {
        "type" : "long",
        "script" : {
          "source" : "emit(doc['timestamp'].value.getHour());"
        }
      }
    }
  },
  "analysis_config" : {
    "bucket_span" : "15m",
    "detectors" : [
      {
        "detector_description" : "Sum of bytes",
        "function" : "sum",
        "field_name" : "bytes",
        "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
  },
  "model_snapshot_retention_days" : 10,
  "daily_model_snapshot_retention_after_days" : 1,
  "results_index_name" : "custom-test-job1",
  "allow_lazy_open" : false
}