Оповещение по электронной почте на основании того, что мониторы выключаются / возвращаются - PullRequest
1 голос
/ 05 апреля 2020

Я довольно новичок в этом, но мне нужна помощь с настройкой моего наблюдателя. - Я использую X-Pack Watchers.

У меня настроен Heartbeat, и в настоящее время у меня 7 мониторов. то есть monitor-01 monitor-02 et c.

Мне нужна помощь в настройке моего точного сценария ios, мне нужна помощь с 3 сценариями ios:

Сценарий 1 : Если monitor-01 переходит в автономный режим, я хочу отправить ТОЛЬКО 1 электронное письмо на "test@domain.com" с текстом: "Здравствуйте, monitor-01 только что отключился! Пожалуйста, проверьте, спасибо."

Если монитор-02 переходит в автономный режим, я хочу получить тот же результат, что и выше. Я не хочу, чтобы несколько электронных писем оповещали меня каждую секунду / минуту, если монитор не работает, я хочу только 1 электронное письмо.

Сценарий 2 : если monitor-01 или какие-либо мои мониторы отключены ... Каждые 3 часа я хочу отправлять электронное письмо с обновлением sh (я хотел бы, чтобы в теле письма указывалось, как долго указывается c монитор выключен, т.е. монитор выключен на 120 часов 13 минут). Итак, если прошло 3 часа, я хочу отправить электронное письмо на «test@domain.com» с текстом: «Здравствуйте, это напоминание о том, что monitor-01 еще не подключен! Пожалуйста, проверьте, спасибо.»

Сценарий 3 : Если какой-либо из мониторов снова подключится к сети, я хочу отправить электронное письмо по адресу "test@domain.com" с текстом: "Здравствуйте, отличные новости! Monitor-02 is снова в сети. Монитор не работал 7 часов 12 минут. Спасибо. "

Может кто-нибудь помочь? Я посмотрел везде и не могу найти правильный синтаксис для создания вышеупомянутого сценария ios. Это были бы сценарии ios Я чувствую, что они могут принести пользу другим членам сообщества.

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 секунд, если монитор не работает, что не то, что я хочу.

Вот что говорится в электронном письме, когда все собрано вместе: Тема: Monitor is DOWN: [UAT] Тело тестового веб-сайта: Здравствуйте, в настоящее время монитор отключен. Пожалуйста, проверьте ...

Может ли кто-нибудь помочь с моим сценарием ios? Я потратил на это уже несколько дней ... много часов прошло, не так много, чтобы выйти из этого!

Спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Есть две вещи, на которые вы можете посмотреть: регулирование и подтверждение уведомлений

  • регулирование: после выполнения действия (например, отправка электронного письма) , не делайте это действие снова в течение 3 часов
  • Подтвердите: : в этом случае вам нужно вызвать API, чтобы сказать: «Я получил уведомление, что watcher01 обнаружил ошибку , не отправляйте никаких уведомлений об этом снова. "
...