Мониторинг Cron и heartbeat
Создано 11 Сентябрь, 2024
Мониторинг Cron и heartbeat работает следующим образом: необходимо периодически отправлять запросы на уникальный URL-адрес монитора, чтобы он НЕ создавал новый инцидент.
Пример использования У нас есть фоновая задача, которая ежедневно создает резервную копию основной базы данных PostgreSQL. Мы хотим получать уведомление, если фоновая задача не выполнится успешно
Создание heartbeat-монитора:
- Перейдите в «Обзор» → «Создать heartbeat».
- Назовите heartbeat — «Ежедневное резервное копирование базы данных».
- Измените опцию «Ожидать heartbeat каждые» на «1 день».
- При желании настройте параметры эскалации вызова дежурных.
- Нажмите «Создать».
- Скопируйте секретный 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.