触发器

创建触发器的方式取决于创建监控器时选择的监控方法。监控方法包括可视化编辑器提取查询编辑器异常检测器。在以下部分了解每种类型。

创建触发器

要创建触发器:

  1. Create monitor 窗口中,选择 Add trigger

  2. 输入触发器名称、严重性级别和触发条件。严重性级别范围从 1(最高)到 5(最低),有助于管理告警。例如,严重性级别高的触发器(例如 1 或 2)可能会通知特定个人,而严重性级别低的触发器(4 或 5)可能会通知聊天室。触发条件包括”高于”、”低于”和”恰好等于”。

查询级监控器针对查询结果运行一次触发器的脚本,而桶级监控器对每个桶运行触发器的脚本。创建最适合监控方法的触发器。要运行多个脚本,必须创建多个触发器。

可视化编辑器

对于查询级监控器的触发条件,指定创建监控器时选择的聚合和时间范围的阈值(例如,”低于 1,000” 或 “恰好等于 10”)。当您增加或减少阈值时,线条会上下移动。一旦越过此线,触发器评估为 true

对于桶级监控器,必须为聚合和时间范围指定阈值和值。最多可以使用五个条件来优化触发器。可选地,您还可以使用关键字过滤器来筛选索引中的特定字段。

对于文档级监控器,使用代表由逻辑 OR 运算符连接的多个查询的标签。要创建多查询触发器:

  1. 选择 Per document monitor

  2. 选择数据源。

  3. 输入查询名称和字段信息。例如,设置查询以搜索 region 字段,运算符为”是”或”不是”,值为 “us-west-2”。

  4. 选择 Add tag 并输入标签名称。

  5. 通过选择 Add another query 创建第二个查询,并向其添加相同的标签。

现在您可以创建触发条件并指定标签名称。这将创建一个组合触发器,检查两个包含相同标签的查询。监控器通过逻辑 OR 操作检查两个查询,如果任一查询的条件满足,则生成告警通知。

提取查询编辑器

对于查询级监控器,指定一个返回 truefalse 的 Painless 脚本。Painless 是 UDB-SX 的默认脚本语言,语法类似于 Groovy。

触发条件脚本围绕 ctx.results[0] 变量展开,该变量对应于提取查询响应。例如,脚本可能引用 ctx.results[0].hits.total.valuectx.results[0].hits.hits[i]._source.error_code

返回值为 true 表示触发条件已满足,触发器应运行其操作。使用 Run 按钮测试脚本。

Trigger condition 旁边的 Info 链接包含可用变量和查询结果的有用摘要。

桶级监控器要求您在触发条件中指定更多信息。至少必须包含以下字段:

  • buckets_path:将变量名映射到要在脚本中使用的指标。

  • parent_bucket_path:到多桶聚合的路径。该路径可以包含单桶聚合,但最后一个聚合必须是多桶的。例如,如果您有一个流水线如 agg1>agg2>agg3agg1agg2 是单桶聚合,但 agg3 必须是多桶聚合。

  • script:UDB-SX 运行以评估是否触发任何告警的脚本。

以下是一个脚本示例:

{
  "buckets_path": {
    "count_var": "_count"
  },
  "parent_bucket_path": "composite_agg",
  "script": {
    "source": "params.count_var > 5"
  }
}

count_var 变量映射到 _count 指标后,您可以在脚本中使用 count_var 并引用 _count 数据。composite_agg 是到多桶聚合的路径。

异常检测器

要使用异常检测器方法:

  1. 对于 Trigger type,选择 Anomaly detector grade and confidence

  2. 指定创建监控器时选择的聚合和时间范围的异常等级条件,例如,”高于 0.7” 或 “恰好等于 0.5”。异常等级是一个介于 0 和 1 之间的数字,表示数据点的异常程度。

  3. 指定先前选择的聚合和时间范围的异常置信度条件,”高于 0.7” 或 “恰好等于 0.5”。异常置信度是报告的异常等级与预期异常等级匹配的概率估计。当您增加和减少阈值时,线条会上下移动。一旦越过此线,触发器评估为 true

示例脚本

// 如果查询返回任何文档,则评估为 true
ctx.results[0].hits.total.value > 0
// 如果 avg_cpu 聚合超过 90,则返回 true
if (ctx.results[0].aggregations.avg_cpu.value > 90) {
  return true;
}
// 执行一些粗略的自定义评分,如果该分数超过某个值,则返回 true
int score = 0;
for (int i = 0; i < ctx.results[0].hits.hits.length; i++) {
  // 将 500 错误的权重设为 503 错误的 10 倍
  if (ctx.results[0].hits.hits[i]._source.http_status_code == "500") {
    score += 10;
  } else if (ctx.results[0].hits.hits[i]._source.http_status_code == "503") {
    score += 1;
  }
}
if (score > 99) {
  return true;
} else {
  return false;
}

触发器变量

变量 数据类型 描述
ctx.trigger.id 字符串 触发器 ID。
ctx.trigger.name 字符串 触发器名称。
ctx.trigger.severity 字符串 触发器严重性。
ctx.trigger.condition 对象 包含创建监控器时使用的 Painless 脚本。
ctx.trigger.condition.script.source 字符串 用于定义脚本的语言。必须是 Painless。
ctx.trigger.condition.script.lang 字符串 用于定义触发器的脚本。
ctx.trigger.actions 数组 包含一个元素的数组,其中包含有关监控器需要触发的操作的信息。

其他变量

变量 数据类型 描述
ctx.results 数组 包含一个元素的数组(ctx.results.0)。包含查询结果。如果触发器无法检索结果,则此变量为空。请参阅 ctx.error
ctx.last_update_time 毫秒 监控器上次更新的 Unix 纪元时间。
ctx.periodStart 字符串 告警触发期间开始的 Unix 时间戳。例如,如果监控器每 10 分钟运行一次,则一个周期可能从 10:40 开始,到 10:50 结束。
ctx.periodEnd 字符串 告警触发期间的结束时间。
ctx.error 字符串 如果触发器无法检索结果或无法评估(通常由于编译错误或空指针异常)时显示的错误消息。否则为 null。
ctx.alert 对象 当前活动的告警(如果存在)。包括 ctx.alert.idctx.alert.versionctx.alert.isAcknowledged。如果没有活动告警,则为 null。仅适用于查询级监控器。
ctx.alerts 数组 新创建的告警。包括触发告警的 ctx.alerts.0.finding_ids 和与发现关联的 ctx.alerts.0.related_doc_ids。仅适用于文档级监控器。
ctx.dedupedAlerts 数组 已触发的告警。UDB-SX 保留现有告警以防止插件永久创建相同的告警。仅适用于桶级监控器。
ctx.newAlerts 数组 新创建的告警。仅适用于桶级监控器。
ctx.completedAlerts 数组 已完成或已过期的告警。仅适用于桶级监控器。
bucket_keys 字符串 监控器桶键值的逗号分隔列表。仅适用于 ctx.dedupedAlertsctx.newAlertsctx.completedAlerts。通过 ctx.dedupedAlerts.0.bucket_keys 变量访问。
parent_bucket_path 字符串 触发告警的桶的父桶路径。通过 ctx.dedupedAlerts.0.parent_bucket_path 访问。
associated_queries 数组 触发与告警关联的发现创建的文档级监控器查询数组。仅适用于文档级监控器。通过 ctx.alerts.0.associated_queries 变量访问。
sample_documents 数组 与监控器查询匹配的示例文档数组。仅适用于桶级和文档级监控器。分别通过 ctx.newAlerts.0.sample_documentsctx.alerts.0.sample_documents 变量访问。

associated_queriessample_documents 变量

按桶和按文档监控器支持在通知消息中打印示例文档。按文档监控器支持打印触发与告警关联的发现创建的查询列表。当监控器运行时,它将每个新告警添加到 ctx 变量中,例如,按桶监控器的 newAlerts 和按文档监控器的 alerts。每个告警都有自己的 sample_documents 列表,每个按文档监控器告警都有自己的 associated_queries 列表。可以格式化消息模板以遍历告警列表、associated_queries 列表以及每个告警的 sample_documents

告警监控器使用创建它的用户的权限。请注意 Notifications 插件通道(告警消息发送到的通道)以及消息 mustache 模板的内容。要了解有关 Alerting 插件安全性的更多信息,请参阅 告警安全性

示例文档变量

变量 数据类型 描述
_index 字符串 包含示例文档的索引。
_id 字符串 示例文档 ID。
_score 浮点数 表示返回文档相关性的正 32 位浮点数。
_source 对象 示例文档的 JSON 负载。
Mustache 模板示例
Alerts:
{{#ctx.alerts}}
    RULES
    {{#associated_queries}}
        Name: {{name}}
        Id: {{id}}
        Tags: {{tags}}
    ------------------------
    {{/associated_queries}}
{{/ctx.alerts}}

关联查询变量

变量 数据类型 描述
id 字符串 文档级查询的 ID。
name 字符串 文档级查询的名称。
tags 数组 为文档级查询配置的标签(每个类型为 String)数组。
Mustache 模板示例

此示例中的 _source 对象基于 UDB-SX Dashboards 中可用的 opensearch_dashboards_sample_data_ecommerce 索引。在此示例中,消息模板正在访问按文档监控器的 ctx.alerts 变量。

Alerts
{{#ctx.alerts}}
    Sample documents:
    {{#sample_documents}}
        Index: {{_index}}
        Document ID: {{_id}}
       
        Order date: {{_source.order_date}}
        Order ID: {{_source.order_id}}
        Clothing category: {{_source.category}}
        -----------------
    {{/sample_documents}}
{{/ctx.alerts}}