elastic-stack - 基于监视器关闭/恢复的电子邮件警报
问题描述
我对此很陌生,但我需要一些关于我的观察者设置的帮助。- 我正在使用 X-Pack Watchers。
我已经设置了 Heartbeat,我目前有 7 台显示器。即monitor-01 monitor-02等。
我需要帮助设置我的确切场景,我需要 3 个场景的帮助:
场景 1:如果 monitor-01 离线,我只想向“test@domain.com”发送 1 封电子邮件,正文为:“您好,monitor-01 刚刚离线!请检查,谢谢。”
如果 monitor-02 离线,我想要与上面完全相同的结果。如果监视器关闭,我不希望每秒/分钟有多封电子邮件提醒我,我只想要一封电子邮件。
场景 2:如果 monitor-01 或我的任何监视器处于脱机状态...每 3 小时,我希望发送一封刷新电子邮件(我希望电子邮件正文包含特定监视器停机的时间,即监视器停机 120 小时13 分钟)。因此,如果 3 小时过去了,我想向“test@domain.com”发送一封电子邮件,正文为:“您好,这是一个提醒电子邮件,monitor-01 仍处于离线状态!请检查,谢谢。”
场景 3:如果任何监视器重新联机,我想向“test@domain.com”发送一封电子邮件,正文如下:“您好,好消息!监视器 02 重新联机。监视器已关闭7 小时 12 分钟。谢谢。”
有人可以帮忙吗?我到处寻找,找不到创建上述场景的正确语法。这些将是我认为可以使社区的其他成员受益的场景。
Ps,我目前在论坛上找到了一块高级手表,但不符合我的标准。这是它的代码:
{
"trigger": {
"schedule": {
"interval": "30s"
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
"heartbeat-*"
],
"rest_total_hits_as_int": true,
"body": {
"query": {
"bool": {
"must": {
"match": {
"monitor.status": "down"
}
},
"filter": {
"range": {
"@timestamp": {
"from": "now-50s"
}
}
}
}
},
"aggregations": {
"by_monitors": {
"terms": {
"field": "monitor.name"
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"email_admin": {
"email": {
"profile": "standard",
"from": "noreply@domain.com",
"to": [
"test@domain.com"
],
"subject": "Monitor is DOWN: {{ctx.payload.aggregations.by_monitors.buckets.0.key}}",
"body": {
"text": "Hello, there is a monitor offline currently. Please check..."
}
}
}
}
}
如果监视器出现故障,我整理的上述脚本每 30 秒发送一封电子邮件,这不是我想要的。
将所有内容放在一起后,电子邮件中的内容如下: 主题:监视器已关闭:[UAT] 测试网站正文:您好,当前有一个监视器离线。请检查...
有人可以协助我的方案吗?我已经在这上面花了好几天了。很多小时过去了,没有多少可以从中出来!
谢谢。
解决方案
您可以研究两件事:限制和确认通知
- 节流:一旦动作完成(例如发送电子邮件),3 小时内不要再执行该动作
- 确认::在这种情况下,您需要调用 API 说:“我确实收到了 watcher01 发现错误的通知,不要再发送任何有关它的通知。”
推荐阅读
- unit-testing - 使用 VS Code 运行 ASP .Net 核心应用程序的 NUnit 测试用例
- python - PI3D 纹理导入的 obj 模型,就好像它是一个高程图
- javascript - 如何将通过浏览器上传的文件转换为字节?
- r - R 列表包 ict.reg 不会运行
- c# - C# DocusignAPI 复合模板与服务器模板上的选项卡
- android - 如何在我的 ProgressBar 下方放置一个按钮?
- sql - 使用本地与在 aws rds 上使用时,Knex 返回不同的响应
- javascript - 使用 CSS 根据文本值对 div 的文本进行着色
- javascript - 在模块中 res.send() 之后停止 res
- java - 尽管这两个字符相同,但条件的行为就好像它们在 java 中不一样