首页 > 解决方案 > 基于监视器关闭/恢复的电子邮件警报

问题描述

我对此很陌生,但我需要一些关于我的观察者设置的帮助。- 我正在使用 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] 测试网站正文:您好,当前有一个监视器离线。请检查...

有人可以协助我的方案吗?我已经在这上面花了好几天了。很多小时过去了,没有多少可以从中出来!

谢谢。

标签: elastic-stackelasticsearch-x-packelasticsearch-watcher

解决方案


您可以研究两件事:限制和确认通知

  • 节流:一旦动作完成(例如发送电子邮件),3 小时内不要再执行该动作
  • 确认::在这种情况下,您需要调用 API 说:“我确实收到了 watcher01 发现错误的通知,不要再发送任何有关它的通知。”

推荐阅读