Link Search Menu Expand Document Documentation Menu

触发器

根据创建监视器时选择的监视器方法,创建触发器的方式有所不同。监视器方法包括**可视化编辑器**、**提取查询编辑器**和**异常检测器**。在以下部分中了解每种类型的更多信息。

创建触发器

创建触发器

  1. 在**创建监视器**窗口中,选择**添加触发器**。
  2. 输入触发器名称、严重级别和触发条件。严重级别范围从 1(最高)到 5(最低),有助于管理警报。例如,严重级别高(例如,1 或 2)的触发器可能会通知特定个人,而严重级别低(4 或 5)的触发器可能会通知聊天室。触发条件包括“高于 (IS ABOVE)”、“低于 (IS BELOW)”和“精确等于 (IS EXACTLY)”。

查询级监视器会根据查询结果运行一次触发器的脚本,而桶级监视器会在每个桶上运行触发器的脚本。创建最适合监视器方法的触发器。要运行多个脚本,必须创建多个触发器。

可视化编辑器

对于查询级监视器的触发条件,请为您在创建监视器时选择的聚合和时间范围指定阈值(例如,“低于 1,000 (IS BELOW 1,000)”或“精确等于 10 (IS EXACTLY 10)”)。随着阈值的增加或减少,该线会上下移动。一旦越过此线,触发器评估结果为 true

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

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

  1. 选择**按文档监视器**。
  2. 选择一个数据源。
  3. 输入查询名称和字段信息。例如,将查询设置为搜索 region 字段,运算符为“是 (is)”或“不是 (is not)”,值为“us-west-2”。
  4. 选择**添加标签**并输入标签名称。
  5. 通过选择**添加另一个查询**创建第二个查询,并为其添加相同的标签。

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

提取查询编辑器

对于查询级监视器,请指定一个返回 truefalse 的 Painless 脚本。Painless 是 OpenSearch 的默认脚本语言,其语法类似于 Groovy。

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

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

**触发条件**旁边的**信息**链接包含可用于查询的变量和结果的有用摘要。

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

  • buckets_path:将变量名映射到脚本中使用的指标。
  • parent_bucket_path:多桶聚合的路径。路径可以包含单桶聚合,但最后一个聚合必须是多桶聚合。例如,如果有一个管道,如 agg1>agg2>agg3agg1agg2 是单桶聚合,但 agg3 必须是多桶聚合。
  • script:OpenSearch 运行的脚本,用于评估是否触发任何警报。

以下是一个示例脚本:

{
  "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. 对于**触发器类型**,选择**异常等级和置信度**。
  2. 指定您在创建监视器时选择的聚合和时间范围的**异常等级条件**,例如,“高于 0.7 (IS ABOVE 0.7)”或“精确等于 0.5 (IS EXACTLY 0.5)”。*异常等级*是一个介于 0 和 1 之间的数字,表示数据点的异常程度。
  3. 为之前选择的聚合和时间范围指定**异常置信度条件**,“高于 0.7 (IS ABOVE 0.7)”或“精确等于 0.5 (IS EXACTLY 0.5)”。*异常置信度*是对报告的异常等级与预期异常等级匹配概率的估计。随着阈值的增加和减少,该线会上下移动。一旦越过此线,触发器评估结果为 true

示例脚本

// Evaluates to true if the query returned any documents
ctx.results[0].hits.total.value > 0
// Returns true if the avg_cpu aggregation exceeds 90
if (ctx.results[0].aggregations.avg_cpu.value > 90) {
  return true;
}
// Performs some crude custom scoring and returns true if that score exceeds a certain value
int score = 0;
for (int i = 0; i < ctx.results[0].hits.hits.length; i++) {
  // Weighs 500 errors 10 times as heavily as 503 errors
  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 数组 已触发的警报。OpenSearch 保留现有警报以防止插件永久创建相同的警报。仅适用于桶级监视器。
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

警报监视器使用创建它的用户的权限。请注意警报消息发送到的通知插件通道以及消息 Mustache 模板的内容。要了解有关警报插件中安全性的更多信息,请参阅警报安全性

示例文档变量

变量 数据类型 描述
_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。
名称 字符串 文档级查询的名称。
tags 数组 为文档级查询配置的标签数组(每个标签都是字符串类型)。
Mustache 模板示例

此示例中的 _source 对象基于 OpenSearch 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}}
剩余 350 字符

有问题?

想贡献吗?