elasticsearch - 如何按 Docker 实例对 Elastic Stack 警报进行分组?
问题描述
某个周期性任务应该每分钟发生一次。当阈值警报中出现以下情况时,我可以发送警报。
WHEN count() GROUPED OVER top 1 'periodicTaskLog' IS BELOW 1 FOR THE LAST 2 minutes
(这使用基本的手表创建 GUI。如果需要,我可以使用高级手表 JSON。)
我的复杂情况:此任务在 2 个或更多 Docker 实例中分别发生,我想检查它们是否被阻止。(这是在 Google AppEngine 柔性环境中。)
我想说“密钥periodicTaskLog
必须在每个实例中每分钟出现一次。否则发送警报。”
我有领域instance_name
。每个实例的名称都是任意值,例如 "a58hgh12g2"
或"h9mm48dfh"
,在每个部署中都不同。因此,我无法将条件编码为将这些名称包含为文字。
那么,我该如何以这种方式进行分组呢?
解决方案
在这里查看答案
{
"trigger": {
"schedule": {
"interval": "10s"
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
"packetbeat-*"
],
"types": [],
"body": {
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"unique_beat_names": {
"terms": {
"field": "ip",
"size": 5
},
"aggs": {
"response_code": {
"filter": {
"exists": {
"field": "dns.response_code"
}
}
}
}
}
}
}
}
}
},
"condition": {
"script": {
"source": "ctx.vars.missing=false;for (def beat_name : ctx.payload.aggregations.unique_beat_names.buckets){if(beat_name.doc_count == 0 || beat_name.response_code.doc_count == 0){ctx.vars.missing=true;}}return ctx.vars.missing;",
"lang": "painless"
}
},
"actions": {
"my-logging-action": {
"logging": {
"level": "info",
"text": "Oh yea"
}
}
}
}
推荐阅读
- javascript - 在 React 中,如何从不同组件的事件处理程序触发自定义按钮的单击事件?
- python - 将函数中的文本打印到 tkinter 标签中
- javascript - 距当前时间 30 秒后,显示已过 30 秒的通知
- javascript - 由于不允许的 MIME 类型(“application/wasm”),加载模块被阻止
- python - 将数据添加到仅包含列名的现有空数据框
- android - 我应该如何知道为不同的视图添加什么依赖项?
- firebase - 强制 Firestore 数组与已经是数组一部分的值合并
- python - HexString 到打包的 EBCDIC 字符串
- html - 如何通过特定索引设置文本样式?
- python - 如何在python中将最多63位的数字转换为单词?