Все материалы

Фоновые задачи

Grace period: как выбрать допустимую задержку heartbeat

На примерах разбираем интервал и cron, длительность задачи, UTC и запас времени без чрезмерного откладывания сбоя.

Команда Uptimely

Grace period — допустимая задержка сигнала после ожидаемого срока. Он помогает учесть обычный разброс длительности и доставки запроса, но слишком большой запас откладывает обнаружение настоящего отказа. В Heartbeat срок зависит от выбранного режима: интервал и cron считают его по-разному.

Интервал: считаем от последнего сигнала

Пусть интервал равен пяти минутам, а grace period — двум. После сигнала в 12:00 крайний срок следующего — 12:07. Если новый сигнал принят в 12:04, ожидание пересчитывается от него: следующий срок — 12:11.

Последний принятый сигнал + интервал + grace period = крайний срок 12:00 + 5 минут + 2 минуты = 12:07

При создании монитора первый срок рассчитывается от момента настройки. Отправьте первый сигнал и проверьте историю, не оставляя активный монитор без подключённого источника.

Cron: считаем от точки расписания

Для ежедневной задачи в 03:00 UTC выражение Heartbeat — 0 0 3 * * *: шесть полей с секундами. Если grace period равен двадцати минутам, сигнал после завершения работы ожидается до 03:20 UTC.

Системный crontab обычно использует пять полей и часовой пояс сервера. Его аналог 0 3 * * * соответствует монитору только при согласованном часовом поясе. Валидатор проверяет системный формат, а не шестипольное выражение Heartbeat.

После принятого сигнала монитор вычисляет следующую точку cron. Поэтому источник должен присылать сигнал после работы соответствующего запуска, а не заранее. Не используйте тестовый ранний запрос как подтверждение ещё не выполненного ночного бэкапа.

Включите длительность работы в запас

Для cron-мониторинга сигнал обычно идёт после завершения задачи, хотя расписание задаёт её запуск. Grace period должен покрывать обычную длительность, возможную очередь перед стартом и отправку запроса.

НаблюдениеЧто учесть при настройке
Запуск в 03:00, задача занимает 8–12 минутОжидание сигнала должно покрывать выполнение, а не только сетевой запрос
Выгрузка во внешнее хранилище иногда добавляет 5 минутВключите её, если именно загруженная копия считается успехом
Воркер спит между цикламиДля интервала измеряйте полный промежуток между сигналами
Часто пропускается исходящий запросРазберите сеть и timeout; увеличение запаса не исправляет доставку

Не выбирайте одинаковый запас для всех заданий. Слишком короткий создаст лишние инциденты, а несколько часов допуска для пятиминутного цикла надолго скроют остановку.

Grace period и подтверждение инцидента

Grace period относится к ожидаемому сигналу. Настроенная задержка подтверждения инцидента применяется отдельно после обнаружения проблемы. Эти настройки могут суммировать время до уведомления.

Кроме того, пропуск обрабатывается фоновой задачей, а доставка уведомления занимает время. Срок 12:07 не означает, что сообщение гарантированно придёт ровно в 12:07:00. Проверяйте историю сигнала, открытие инцидента и фактическое оповещение как отдельные этапы.

Как проверить выбранное окно

  1. Измерьте промежутки между успешными сигналами или длительность задания за репрезентативный период.
  2. Задайте режим, срок и допустимую задержку на основе этих наблюдений.
  3. На отдельном тестовом мониторе проверьте пропуск и восстановление; для задержек процесса используйте локальный стенд.
  4. После подключения рабочего задания проверьте первый полный запуск и уведомления.
  5. Пересмотрите настройки при изменении расписания, объёма данных или внешних зависимостей.

Для подключения используйте документацию Heartbeat. Практические сценарии: cron и curl, резервные копии PostgreSQL, циклы воркера.