触发器
创建触发器的方式取决于创建监控器时选择的监控方法。监控方法包括可视化编辑器、提取查询编辑器和异常检测器。在以下部分了解每种类型。
创建触发器
要创建触发器:
在 Create monitor 窗口中,选择 Add trigger。
输入触发器名称、严重性级别和触发条件。严重性级别范围从 1(最高)到 5(最低),有助于管理告警。例如,严重性级别高的触发器(例如 1 或 2)可能会通知特定个人,而严重性级别低的触发器(4 或 5)可能会通知聊天室。触发条件包括”高于”、”低于”和”恰好等于”。
查询级监控器针对查询结果运行一次触发器的脚本,而桶级监控器对每个桶运行触发器的脚本。创建最适合监控方法的触发器。要运行多个脚本,必须创建多个触发器。
可视化编辑器
对于查询级监控器的触发条件,指定创建监控器时选择的聚合和时间范围的阈值(例如,”低于 1,000” 或 “恰好等于 10”)。当您增加或减少阈值时,线条会上下移动。一旦越过此线,触发器评估为 true。
对于桶级监控器,必须为聚合和时间范围指定阈值和值。最多可以使用五个条件来优化触发器。可选地,您还可以使用关键字过滤器来筛选索引中的特定字段。
对于文档级监控器,使用代表由逻辑 OR 运算符连接的多个查询的标签。要创建多查询触发器:
选择 Per document monitor。
选择数据源。
输入查询名称和字段信息。例如,设置查询以搜索
region字段,运算符为”是”或”不是”,值为 “us-west-2”。选择 Add tag 并输入标签名称。
通过选择 Add another query 创建第二个查询,并向其添加相同的标签。
现在您可以创建触发条件并指定标签名称。这将创建一个组合触发器,检查两个包含相同标签的查询。监控器通过逻辑 OR 操作检查两个查询,如果任一查询的条件满足,则生成告警通知。
提取查询编辑器
对于查询级监控器,指定一个返回 true 或 false 的 Painless 脚本。Painless 是 UDB-SX 的默认脚本语言,语法类似于 Groovy。
触发条件脚本围绕 ctx.results[0] 变量展开,该变量对应于提取查询响应。例如,脚本可能引用 ctx.results[0].hits.total.value 或 ctx.results[0].hits.hits[i]._source.error_code。
返回值为 true 表示触发条件已满足,触发器应运行其操作。使用 Run 按钮测试脚本。
Trigger condition 旁边的 Info 链接包含可用变量和查询结果的有用摘要。
桶级监控器要求您在触发条件中指定更多信息。至少必须包含以下字段:
buckets_path:将变量名映射到要在脚本中使用的指标。parent_bucket_path:到多桶聚合的路径。该路径可以包含单桶聚合,但最后一个聚合必须是多桶的。例如,如果您有一个流水线如agg1>agg2>agg3,agg1和agg2是单桶聚合,但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 是到多桶聚合的路径。
异常检测器
要使用异常检测器方法:
对于 Trigger type,选择 Anomaly detector grade and confidence。
指定创建监控器时选择的聚合和时间范围的异常等级条件,例如,”高于 0.7” 或 “恰好等于 0.5”。异常等级是一个介于 0 和 1 之间的数字,表示数据点的异常程度。
指定先前选择的聚合和时间范围的异常置信度条件,”高于 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.id、ctx.alert.version 和 ctx.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.dedupedAlerts、ctx.newAlerts 和 ctx.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_documents 和 ctx.alerts.0.sample_documents 变量访问。 |
associated_queries 和 sample_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}}