Мониторинг Cron и heartbeat

Создано 11 Сентябрь, 2024

Мониторинг Cron и heartbeat работает следующим образом: необходимо периодически отправлять запросы на уникальный URL-адрес монитора, чтобы он НЕ создавал новый инцидент.

Пример использования У нас есть фоновая задача, которая ежедневно создает резервную копию основной базы данных PostgreSQL. Мы хотим получать уведомление, если фоновая задача не выполнится успешно

Создание heartbeat-монитора:

  1. Перейдите в «Обзор» → «Создать heartbeat».
  2. Назовите heartbeat — «Ежедневное резервное копирование базы данных».
  3. Измените опцию «Ожидать heartbeat каждые» на «1 день».
  4. При желании настройте параметры эскалации вызова дежурных.
  5. Нажмите «Создать».
  6. Скопируйте секретный URL на странице деталей heartbeat — он понадобится вам позже.Этот heartbeat будет ожидать от нас выполнения GET или POST запроса на указанный URL каждый день после первого запроса

Настройка CRON и фоновой задачи Добавьте задачу CRON, которая будет выполнять фоновую задачу backup_database.sh каждый день в полночь:

0 0 * * * ruby /home/deploy/backup_database.sh >/dev/null 2>&1

Включите вызов curl для отправки запроса на URL heartbeat в конец вашего скрипта резервного копирования:

#!/usr/bin/env bash set -o errexit set -o xtrace date=`date "+%Y-%m-%d_%H:%M:%S"` file="/dumps/uptime.statuspages.$date.dump" time dokku postgres:export uptime > "$file" /usr/local/bin/aws s3 cp "$file" s3://uptime-dbbackups/ rm "$file" # вы получите этот URL на панели Uptime curl "https://statuspages.ru/webhook-heartbeat/XXXXXXXXXXXXXXXXXXXXXX"

В этом примере URL-адрес heartbeat, который мы создали ранее, ожидает GET или POST запроса каждый день после первого запроса. Если код выше завершится неудачей, фоновая задача не выполнит запрос к URL heartbeat, и в таком случае heartbeat оповестит текущего дежурного и создаст инцидент.

Сообщение о сбоях

В дополнение к созданию инцидента при пропущенном heartbeat, можно также явно сообщить о сбое, добавив /fail в конец вашего URL:

curl "https://statuspages.ru/webhook-heartbeat/XXXXXXXXXXXXXXXXXXXXXX/fail"

Это немедленно создаст инцидент, который автоматически разрешится при получении следующего "обычного" heartbeat.