Skip to content

Heartbeat-monitor

Коротко:

Heartbeat-monitor — обратный uptime-monitor: вместо проверки «жив ли сервис извне», ваш сервис сам шлёт пинг каждые N минут. Если пинг не приходит вовремя — алерт. Применение: cron-задачи, фоновые worker'ы, ETL-пайплайны, бэкап-скрипты. Иногда называется dead-man's switch.

Ниже: подробности, пример, смежные термины, FAQ.

Попробовать бесплатно →

Детали

  • Сценарий: ежедневный бэкап в 03:00. Скрипт POST'ит heartbeat в конце. Не приходит к 03:15 → алерт
  • Преимущество над uptime: ловит «тихие» падения (cron не запустился, worker завис, без сетевой ошибки)
  • Schedule expression: cron-синтаксис («0 3 * * *») + grace period (15 мин допуска)
  • Endpoint: POST /api/heartbeat?token=X — без тела, мгновенный 200 OK
  • Алерт-каналы: email, Telegram, Slack, webhook — на стороне monitor-сервиса

Пример

# Bash-скрипт с финальным heartbeat
#!/bin/bash
set -e

# Делаем бэкап
mysqldump db > /backup/db-$(date +%F).sql
rsync /backup s3:bucket/

# Если дошли сюда — всё ОК, шлём heartbeat
curl -s "https://enterno.io/api/heartbeat?token=$HEARTBEAT_TOKEN&status=ok"

# Python (с обработкой ошибок)
import requests, sys
try:
    do_backup()
    requests.get('https://enterno.io/api/heartbeat',
                 params={'token': TOKEN, 'status': 'ok'})
except Exception as e:
    requests.get('https://enterno.io/api/heartbeat',
                 params={'token': TOKEN, 'status': 'critical',
                         'msg': str(e)[:200]})
    sys.exit(1)

Связанные

Что такое Heartbeat-monitor (dead-man's switch)

Heartbeat-monitor, или «выключатель мертвого человека», — это механизм, который позволяет отслеживать состояние системы и уведомлять о сбоях или неактивности. Этот инструмент особенно полезен для обеспечения надежности работы критически важных приложений и сервисов. Он работает по принципу регулярной отправки сигналов о работоспособности от клиента к серверу. Если сигнал не поступает в установленный промежуток времени, система автоматически инициирует заранее определенные действия, такие как отправка уведомлений или перезапуск сервисов.

Как работает Heartbeat-monitor

Heartbeat-monitor реализуется через периодические проверки состояния системы. Например, в случае использования веб-приложения, можно настроить cron-задачу, которая будет отправлять HTTP-запросы на определенный URL, подтверждая, что приложение работает. Если ответа не будет в течение заданного времени, система считает, что приложение вышло из строя.

Пример конфигурации на основе Node.js:

const http = require('http');

const options = {
  hostname: 'example.com',
  port: 80,
  path: '/heartbeat',
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
});

req.on('error', (e) => {
  console.error(`Problem with request: ${e.message}`);
});

req.end();

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

Применение Heartbeat-monitor в современных системах

Heartbeat-monitor находит широкое применение в различных сферах, включая облачные решения, IoT-устройства и системы управления данными. В современных распределенных системах, где несколько компонентов взаимодействуют друг с другом, важно поддерживать постоянный мониторинг их состояния. Например, в микросервисной архитектуре каждый сервис может иметь свой собственный heartbeat, который контролирует его работоспособность.

Кроме того, многие облачные провайдеры, такие как AWS и Azure, предлагают встроенные инструменты для мониторинга состояния виртуальных машин и контейнеров. Используя API, можно интегрировать собственные heartbeat-системы с этими инструментами для получения более детализированной информации о состоянии инфраструктуры.

В качестве примера, интеграция с AWS CloudWatch может выглядеть следующим образом:

const AWS = require('aws-sdk');
const cloudwatch = new AWS.CloudWatch();

const params = {
  MetricData: [
    {
      MetricName: 'Heartbeat',
      Dimensions: [
        {
          Name: 'ServiceName',
          Value: 'MyService'
        }
      ],
      Unit: 'Count',
      Value: 1
    }
  ],
  Namespace: 'MyApp'
};

cloudwatch.putMetricData(params, (err, data) => {
  if (err) console.log(err, err.stack);
  else console.log(data);
});

В этом примере мы отправляем метрику heartbeat в CloudWatch, что позволяет отслеживать состояние сервиса и получать уведомления в случае его недоступности.

Что такое Heartbeat-monitor (dead-man's switch)

Heartbeat-monitor, или «выключатель мёртвого человека», представляет собой систему, предназначенную для мониторинга состояния активных процессов и обеспечения их непрерывной работы. Эта технология используется для автоматического обнаружения сбоев в работе систем, приложений или оборудования, позволяя оперативно реагировать на проблемы. В случае, если основной процесс перестает функционировать, Heartbeat-monitor инициирует заранее определенные действия, такие как уведомление администраторов или запуск резервных систем.

Пример настройки Heartbeat-monitor

Для настройки Heartbeat-monitor можно использовать различные инструменты и технологии, такие как systemd или monit. Рассмотрим пример использования monit для мониторинга веб-сервера.

1. Установите monit:

sudo apt-get install monit

2. Настройте конфигурацию в файле /etc/monit/monitrc:

set daemon 60  # проверка каждые 60 секунд

check process nginx with pidfile /var/run/nginx.pid
    start program = "/usr/sbin/service nginx start"
    stop program = "/usr/sbin/service nginx stop"
    if failed host 127.0.0.1 port 80 then restart
    if 5 restarts within 5 cycles then timeout

В этом примере monit будет проверять, работает ли процесс Nginx, и в случае сбоя автоматически перезапустит его. Также можно настроить уведомления по электронной почте для администраторов, если система не сможет восстановить работу.

3. Запустите monit:

sudo monit start

4. Проверьте статус:

sudo monit status

С помощью этой простой конфигурации вы сможете обеспечить надежность работы вашего веб-сервера и быстро реагировать на возможные сбои.

Dead man's switchТревога при молчании задачи
Гибкий grace-периодДопустимое опоздание пинга
REST API пингОдин GET-запрос подтверждает жизнь
Cron + CI + скриптыДля любых периодических задач

Почему нам доверяют

1мин
минимальный интервал
Email
Telegram + Email алерты
HTTP
ping-эндпоинт
Разведчик
10 мониторов бесплатно

Как это работает

1

Создайте heartbeat

2

Пингуйте URL из cron

3

Получите алерт при пропуске

Что такое Heartbeat-мониторинг?

Heartbeat-монитор — это «обратный монитор»: не мы опрашиваем сервис, а сервис сам сигнализирует нам, что он жив. Если за установленный интервал сигнал не приходит — мы отправляем тревогу.

Простая интеграция

Один GET-запрос к уникальному URL — и монитор знает, что задача выполнена.

Grace-период

Задайте допустимое опоздание пинга, чтобы исключить ложные тревоги.

Умные уведомления

Email и Telegram при пропуске пинга. Повторная тревога, если молчание продолжается.

История выполнения

Полный журнал пингов с временными метками — видите каждое выполнение задачи.

Кому это нужно

DevOps

мониторинг cron-задач

Разработчики

контроль фоновых воркеров

Системные администраторы

dead man's switch

Бизнес

мониторинг платёжных очередей

Частые ошибки

Не ставить grace-периодБез grace-периода любая незначительная задержка вызовет ложную тревогу.
Пинговать до начала работыПингуйте в конце задачи — это подтверждает успешное завершение, а не просто запуск.
Один URL для разных задачСоздайте отдельный монитор для каждой cron-задачи — иначе не поймёте, какая именно упала.
Не проверять при ошибкеЕсли задача завершилась с ошибкой — не пингуйте. Отсутствие пинга = сигнал сбоя.

Лучшие практики

Пингуйте в самом концеПоставьте вызов heartbeat URL последней командой в скрипте.
Используйте curl в croncurl -s https://enterno.io/api/heartbeat/TOKEN — просто и надёжно.
Настройте grace = 20–30%Если задача занимает 5 мин, grace-период = 1–2 мин сверху.
Покрывайте все критичные задачиБекапы, генерация отчётов, синхронизация данных — всё должно иметь heartbeat-монитор.

Начните мониторинг cron бесплатно

Heartbeat-монитор: бесплатно 5 задач, алерты в Telegram и на email при пропуске.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Чем отличается от uptime-monitor?

Uptime — внешняя проверка сервиса (HTTP GET). Heartbeat — внутренний пинг от ВАШЕГО кода. Ловит баги, которые uptime пропустит (cron не запустился — нет HTTP-сервера для проверки).

Что если grace period мал?

Алерты сорваны на медленных runs. Дайте 20-30% буфера от длительности нормального run'a. Лучше пропустить 1 секундный glitch, чем словить 10 ложных алармов.

Status=critical работает как?

В enterno.io: monitor сразу переключается в DOWN + триггерит alert-каналы. Полезно для «скрипт упал внутри» — не ждать таймаута.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 20 мониторов, проверки раз в 5 минут, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.