Мониторинг cron-задач и бэкапов: dead man's switch с Healthchecks.io

Когда бэкап или cron-задача молча сбоит, вы узнаёте об этом в самый неподходящий момент — при попытке восстановить данные. Мы настраиваем мониторинг по принципу dead man's switch на базе Healthchecks.io: система ждёт регулярный сигнал от задачи и мгновенно предупреждает, если он не пришёл. Наша команда реализует проект под ключ — от аудита расписаний до настройки уведомлений и последующей поддержки, чтобы вы всегда знали о сбоях вовремя.
Часто задаваемые вопросы

Сбой бэкапа — не вопрос «если», а «когда»

Без мониторинга вы узнаёте о проблеме только в момент восстановления. За 7 лет мы внедрили мониторинг для 50+ проектов: бэкапы, синхронизации, обновления — всё, что работает по расписанию. Healthchecks.io решает задачу с помощью dead man's switch (концепция из Wikipedia): задача ожидает регулярный ping, а при его отсутствии — алерт. Ускорение обнаружения сбоев — в 10 раз по сравнению с проверкой логов, сокращение MTTR с 24 часов до 1 часа.

Как работает dead man's switch?

Создаёте check с ожидаемым периодом (например, каждый день в 02:00) и grace period 1 час. В конце cron-задачи добавляете HTTP-запрос на уникальный URL check'а. Если пинг не пришёл — Healthchecks.io отправляет уведомление. Важно: используйте оператор &&, чтобы пинг уходил только при успешном завершении скрипта.

# /etc/cron.d/backup
0 2 * * * root /opt/scripts/backup.sh && curl -fsS --retry 3 https://hc-ping.com/your-uuid-here > /dev/null 2>&1

Этот подход надёжнее мониторинга логов: Healthchecks.io проверяет не только наличие процесса, но и его успешное завершение. Вы получаете алерт в течение grace period (обычно 1 час) вместо того, чтобы обнаружить сбой через сутки.

Почему выбирают self-hosted Healthchecks.io?

Для чувствительных данных или air-gapped окружений разворачиваем собственный инстанс. Все данные остаются на вашей инфраструктуре, обновления — вручную, но полный контроль. Бесплатно и без ограничений. Self-hosted снижает расходы на мониторинг при большом количестве checks по сравнению с облачным тарифом. Исходный код доступен на GitHub.

version: '3.8'
services:
  web:
    image: healthchecks/healthchecks:latest
    environment:
      - SECRET_KEY=your-secret-key-here
      - ALLOWED_HOSTS=healthchecks.example.com
      - [email protected]
      - EMAIL_HOST=smtp.example.com
      - EMAIL_PORT=587
      - EMAIL_USE_TLS=True
    ports:
      - "8000:8000"
    volumes:
      - healthchecks-db:/data

Что выбрать: облако или свой сервер?

Параметр Cloud Self-hosted
Бесплатно До 20 checks Полностью
Управление данными На серверах провайдера Ваш сервер
Обновления Автоматические Вручную
Интеграция с внешними системами Через webhook Через webhook + внутренние API
Максимальная задержка алерта Grace + задержка отправки Grace + ваш SMTP

Какие задачи мониторят через Healthchecks.io?

  • Бэкапы БД: pg_dump, mysqldump, Barman — критично для production.
  • Синхронизация: rsync, rclone в S3/GCS.
  • Ротация логов: logrotate, архивация.
  • Обновление SSL: certbot renew — особенно важно для самоподписанных сертификатов.
  • ETL-задачи: ночные отчёты, экспорты.

Кейс из практики: На одном проекте бэкап MySQL не выполнялся месяц из-за нехватки места на диске. После настройки Healthchecks.io с проверкой размера файла проблема выявлялась в течение часа. Мы добавили проверку минимального размера (10 КБ) и алерт в Telegram. С тех пор потерь данных не было. Аналогичная ситуация на другом проекте с PostgreSQL: срабатывание healthcheck предупредило о неполном дампе (файл 2 КБ вместо ожидаемых 50 МБ). Grace period в 30 минут позволил исправить скрипт до следующего бэкапа.

Пример скрипта с проверкой размера
#!/bin/bash
set -e

BACKUP_FILE="/backups/db_$(date +%Y%m%d).sql.gz"
pg_dump -h localhost -U app mydb | gzip > "$BACKUP_FILE"

# Проверяем что файл не пустой (минимум 10KB)
MIN_SIZE=10240
ACTUAL_SIZE=$(stat -c%s "$BACKUP_FILE")
if [ "$ACTUAL_SIZE" -lt "$MIN_SIZE" ]; then
    echo "Backup too small: $ACTUAL_SIZE bytes" >&2
    exit 1
fi

# Пинг только при успехе
curl -fsS --retry 3 "https://hc-ping.com/${HC_UUID}" > /dev/null

Каналы уведомлений и их возможности

Канал Задержка Особенности
Telegram Секунды Простая настройка, групповые чаты
Email До 5 минут Надёжно, но медленнее
PagerDuty Секунды Escalation, интеграция с ITSM
Webhook По настройке Кастомные действия (API, Slack etc.)

Реакция на сбой

Алерт приходит в течение grace period. Далее — runbook: проверить диск, логи, перезапустить задачу. Healthchecks.io позволяет вручную подтвердить problem и отправить повторный ping после исправления.

Процесс внедрения под ключ

  1. Аудит — инвентаризация всех cron-задач, определение критичности.
  2. Проектирование — выбор периода, grace, каналов уведомлений.
  3. Развёртывание — self-hosted инстанс с HTTPS и резервным копированием.
  4. Интеграция — подключение всех задач, в том числе с проверкой размера.
  5. Тестирование — эмуляция сбоев, проверка алертов.
  6. Документация — инструкция для команды по добавлению новых checks.
  7. Поддержка — неделя post-deploy.

Что вы получите в результате

  • Документация: конфигурации всех checks, инструкция по добавлению новых.
  • Доступы: к инстансу Healthchecks.io, интеграция с вашими системами.
  • Обучение: демонстрация добавления checks и реакции на алерты.
  • Поддержка: неделя post-deploy для донастройки.

Типовой проект — от нескольких часов до одного рабочего дня. Стоимость рассчитывается индивидуально в зависимости от сложности. Закажите внедрение — и ваши бэкапы будут под контролем. Получите консультацию: мы оценим вашу текущую схему мониторинга и предложим оптимальный вариант. Свяжитесь с нами для аудита ваших cron-задач.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142