Link Search Menu Expand Document Documentation Menu

管理预测器

在您创建预测器后,您可以使用**详细信息**页面管理其生命周期和配置。这包括启动或停止预测器、更新其设置或完全删除它。使用此页面可以监控预测器状态、排查问题并随时间推移微调行为。

预测器表

**预测器**表提供您已配置的每个预测器的概览。

描述
名称 您在创建预测器时分配的名称。
状态 当前的生命周期状态,例如 Running(正在运行)、Initializing(正在初始化)或 Test complete(测试完成)。单击 图标可获取更多信息,包括最近状态更改的时间戳和任何失败消息。
索引 预测器从中读取的源索引或别名。
上次更新 最近配置更改的时间戳。
快速操作 上下文相关按钮,例如**启动**、**停止**或**删除**,具体取决于预测器的当前状态。

执行状态

预测器(即底层预测作业)可以处于以下任何状态。标有*自动*的转换无需用户操作即可发生;其他转换则需要您手动选择**启动**或**停止**。

状态 描述 典型触发器
非活动 预测器已创建但从未启动。 无。
非活动:已停止 预测器在运行后已手动停止。 用户选择**停止预测**。
等待数据以初始化预测 作业正在尝试启动但缺少足够的历史数据。 自动。
等待数据以重新启动预测 作业在数据中断后正在恢复,并等待新数据。 数据中断后自动。
正在初始化测试 正在为一次性回溯测试构建模型。 在**创建并测试**或**启动测试**时自动。
测试完成 回溯测试已完成,作业不再运行。 自动。
正在初始化预测 正在训练模型以进行连续实时预测。 选择**启动预测**后自动。
运行中 作业正在流式传输实时数据并生成预测。 初始化成功完成后自动。
初始化测试失败 测试失败,通常是由于数据不足。 自动。
初始化预测失败 实时模式初始化失败。 自动。
预测失败 作业已启动但遇到运行时错误,例如分片失败。 自动,但需要用户关注。

下图说明了状态之间的关系和转换。

Forecast state diagram

查找和过滤预测器

如果您有许多预测器,请使用表格底部的分页控件在页面之间导航。您还可以使用搜索栏按**名称**、**状态**或**索引**进行过滤,这在管理大量预测器时会很有帮助。

基于预测值进行警报

由于预测结果索引不是系统索引,您可以像处理任何其他用户索引一样为结果索引创建警报监视器

警报监视器示例

例如,以下是一个高基数预测器的监视器。您可以修改计划、查询和聚合以匹配您的用例

{
   "name": "test",
   "type": "monitor",
   "monitor_type": "query_level_monitor",
   "enabled": true,
   "schedule": {
      "period": {
         "unit": "MINUTES",
         "interval": 1
      }
   },
   "inputs": [
      {
         "search": {
            "indices": [
               "opensearch-forecast-results*"
            ],
            "query": {
               "size": 1,
               "query": {
                  "bool": {
                     "filter": [
                        {
                           "range": {
                              "execution_end_time": {
                                 "from": "{{period_end}}||-15m",
                                 "to": "{{period_end}}",
                                 "include_lower": true,
                                 "include_upper": true,
                                 "format": "epoch_millis",
                                 "boost": 1
                              }
                           }
                        }
                     ],
                     "adjust_pure_negative": true,
                     "boost": 1
                  }
               },
               "aggregations": {
                  "metric": {
                     "max": {
                        "field": "forecast_upper_bound"
                     }
                  }
               }
            }
         }
      }
   ],
   "triggers": [
      {
         "query_level_trigger": {
            "id": "29oAl5cB5QuI4WJQ3hnx",
            "name": "breach",
            "severity": "1",
            "condition": {
               "script": {
                  "source": "return ctx.results[0].aggregations.metric.value == null ? false : ctx.results[0].aggregations.metric.value > 10000",
                  "lang": "painless"
               }
            },
            "actions": [
               {
                  "id": "notification378084",
                  "name": "email",
                  "destination_id": "2uzIlpcBMf-0-aT5HOtn",
                  "message_template": {
                     "source": "Monitor **{{ctx.monitor.name}}** entered **ALERT** state — please investigate.\n\nTrigger    : {{ctx.trigger.name}}\nSeverity   : {{ctx.trigger.severity}}\nTime range : {{ctx.periodStart}} → {{ctx.periodEnd}} UTC\n\nEntity\n{{#ctx.results.0.hits.hits.0._source.entity}}\n  • {{name}} = {{value}}\n{{/ctx.results.0.hits.hits.0._source.entity}}\n",
                     "lang": "mustache"
                  },
                  "throttle_enabled": true,
                  "subject_template": {
                     "source": "Alerting Notification action",
                     "lang": "mustache"
                  },
                  "throttle": {
                     "value": 15,
                     "unit": "MINUTES"
                  }
               }
            ]
         }
      }
   ],
   "ui_metadata": {
      "schedule": {
         "timezone": null,
         "frequency": "interval",
         "period": {
            "unit": "MINUTES",
            "interval": 1
         },
         "daily": 0,
         "weekly": {
            "tue": false,
            "wed": false,
            "thur": false,
            "sat": false,
            "fri": false,
            "mon": false,
            "sun": false
         },
         "monthly": {
            "type": "day",
            "day": 1
         },
         "cronExpression": "0 */1 * * *"
      },
      "monitor_type": "query_level_monitor",
      "search": {
         "searchType": "query",
         "timeField": "execution_end_time",
         "aggregations": [
            {
               "aggregationType": "max",
               "fieldName": "forecast_upper_bound"
            }
         ],
         "groupBy": [],
         "bucketValue": 15,
         "bucketUnitOfTime": "m",
         "filters": []
      }
   }
}

监视器设计

下表解释了示例警报监视器中使用的每个设计选择及其重要性。

设计选择 理由
搜索输入中的 size: 1 检索单个文档,以便您可以在通知中引用 ctx.results.0.hits.hits.0,以识别是哪个实体(例如 hostservice)触发了警报。
execution_end_time 范围 "now-15m"now 根据结果创建时间戳(反映预测生成时间)进行过滤。这避免了因摄入延迟造成的延误。如果您的索引包含迟到数据(例如回填日志),请避免根据 data_end_time 进行过滤。
max(forecast_upper_bound) 作为度量 检测上限峰值。替代方案包括
用于突然下降的 min(forecast_lower_bound)
用于趋势变化的 avg(forecast_value)
有关其他字段,请参阅预测结果模式
索引模式 opensearch-forecast-results* 匹配默认结果索引模式。如果您将结果路由到自定义索引,例如 opensearch-forecast-result-abc*,请更新此模式。
forecaster_id 上的可选术语过滤器 使用此过滤器可以定位特定的预测器,并避免匹配不相关的预测。
每 1 分钟监控一次,查询窗口 15 分钟 每分钟评估预测以快速检测异常。15 分钟的回溯增加了对时间延迟的弹性。结合 15 分钟的警报限制,这避免了同一事件的重复通知。
Mustache 块打印所有实体维度 显示单维度 (host=server_3) 和多维度 (host=server_3, service=auth) 实体值。您还可以包含指向预过滤仪表板的链接,以便更快地进行分类。
阈值 使用 OpenSearch Dashboards 可视化编辑器分析最近的预测值,并确定可靠指示异常的适当阈值。

警报示例

以下示例显示了由监视器生成的示例警报电子邮件,该监视器检测到预测值何时超出定义的阈值。在此示例中,监视器正在跟踪高基数预测器,并已针对特定实体 (host = server_3) 触发警报

Monitor **test** entered **ALERT** state — please investigate.

Trigger    : breach
Severity   : 1
Time range : 2025-06-22T09:56:14.490Z → 2025-06-22T09:57:14.490Z UTC

Entity
  • host = server_3

后续步骤

设置和管理预测器后,您可能需要控制谁可以访问和修改它们。要了解如何管理权限、保护结果索引和应用细粒度访问控制,请参阅安全页面

剩余 350 字符

有问题?

想做出贡献?