触发器
根据创建监视器时选择的监视器方法,创建触发器的方式有所不同。监视器方法包括**可视化编辑器**、**提取查询编辑器**和**异常检测器**。在以下部分中了解每种类型的更多信息。
创建触发器
创建触发器
- 在**创建监视器**窗口中,选择**添加触发器**。
- 输入触发器名称、严重级别和触发条件。严重级别范围从 1(最高)到 5(最低),有助于管理警报。例如,严重级别高(例如,1 或 2)的触发器可能会通知特定个人,而严重级别低(4 或 5)的触发器可能会通知聊天室。触发条件包括“高于 (IS ABOVE)”、“低于 (IS BELOW)”和“精确等于 (IS EXACTLY)”。
查询级监视器会根据查询结果运行一次触发器的脚本,而桶级监视器会在每个桶上运行触发器的脚本。创建最适合监视器方法的触发器。要运行多个脚本,必须创建多个触发器。
可视化编辑器
对于查询级监视器的触发条件,请为您在创建监视器时选择的聚合和时间范围指定阈值(例如,“低于 1,000 (IS BELOW 1,000)”或“精确等于 10 (IS EXACTLY 10)”)。随着阈值的增加或减少,该线会上下移动。一旦越过此线,触发器评估结果为 true
。
对于桶级监视器,您必须为聚合和时间范围指定阈值和值。您最多可以使用五个条件来优化触发器。此外,您还可以选择使用关键字过滤器来过滤索引中的特定字段。
对于文档级监视器,请使用由逻辑 OR
运算符连接的代表多个查询的标签。要创建多查询触发器:
- 选择**按文档监视器**。
- 选择一个数据源。
- 输入查询名称和字段信息。例如,将查询设置为搜索
region
字段,运算符为“是 (is)”或“不是 (is not)”,值为“us-west-2”。 - 选择**添加标签**并输入标签名称。
- 通过选择**添加另一个查询**创建第二个查询,并为其添加相同的标签。
现在您可以创建触发条件并指定标签名称。这将创建一个组合触发器,该触发器检查两个包含相同标签的查询。监视器使用逻辑 OR
操作检查这两个查询,如果其中任何一个查询的条件满足,则生成警报通知。
提取查询编辑器
对于查询级监视器,请指定一个返回 true
或 false
的 Painless 脚本。Painless 是 OpenSearch 的默认脚本语言,其语法类似于 Groovy。
触发条件脚本围绕 ctx.results[0]
变量,该变量对应于提取查询响应。例如,脚本可能引用 ctx.results[0].hits.total.value
或 ctx.results[0].hits.hits[i]._source.error_code
。
返回值为 true
意味着触发条件已满足,触发器应运行其操作。使用**运行**按钮测试脚本。
**触发条件**旁边的**信息**链接包含可用于查询的变量和结果的有用摘要。
桶级监视器要求您在触发条件中指定更多信息。至少,您必须具有以下字段:
buckets_path
:将变量名映射到脚本中使用的指标。parent_bucket_path
:多桶聚合的路径。路径可以包含单桶聚合,但最后一个聚合必须是多桶聚合。例如,如果有一个管道,如agg1>agg2>agg3
,agg1
和agg2
是单桶聚合,但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
是多桶聚合的路径。
异常检测器
使用异常检测器方法:
- 对于**触发器类型**,选择**异常等级和置信度**。
- 指定您在创建监视器时选择的聚合和时间范围的**异常等级条件**,例如,“高于 0.7 (IS ABOVE 0.7)”或“精确等于 0.5 (IS EXACTLY 0.5)”。*异常等级*是一个介于 0 和 1 之间的数字,表示数据点的异常程度。
- 为之前选择的聚合和时间范围指定**异常置信度条件**,“高于 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.id 、ctx.alert.version 和 ctx.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.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
。
警报监视器使用创建它的用户的权限。请注意警报消息发送到的通知插件通道以及消息 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}}