Skip to content
← Все статьи

Мониторинг через webhooks: алерты в свои системы

Мониторинг через webhooks: алерты в свои системы

Коротко. webhook-мониторинг сайтов — это когда система мониторинга при событии (сайт упал, восстановился, истекает SSL) шлёт HTTP POST с JSON-payload на ваш эндпоинт. В отличие от готовых интеграций, webhook позволяет завести алерт в любую свою систему: тикет-трекер, чат-бот, автоматический rollback. Главное правило безопасности — проверять HMAC-подпись (X-*-Signature) и таймстемп, иначе любой сможет подделать алерт.

Зачем нужны webhooks

Готовые интеграции (Telegram, Slack, PagerDuty) покрывают типовые сценарии. Но если нужно дёрнуть свой API документацию, создать инцидент в самописной системе или запустить runbook — нужен webhook. Это универсальный «клей» между мониторингом и вашей инфраструктурой.

  • Автоматизация — алерт запускает скрипт, а не только уведомляет;
  • Своя логика — маршрутизация, дедупликация, эскалация на вашей стороне;
  • Интеграция — любая система с HTTP-эндпоинтом;
  • Аудит — все события в вашей базе.

Структура JSON-payload

Типичный payload события «монитор упал» содержит идентификатор, тип события, цель, таймстемп и детали:

{
  "event": "monitor.down",
  "monitor_id": 4821,
  "monitor_name": "API production",
  "url": "https://api.example.com/health",
  "status": "down",
  "http_code": 503,
  "error": "Service Unavailable",
  "region": "eu-de",
  "checked_at": "2026-06-18T09:14:22Z",
  "timestamp": 1781766862
}

Проверка HMAC-подписи

Никогда не доверяйте payload без проверки подписи. Отправитель считает HMAC-SHA256 от тела запроса с секретом и кладёт в заголовок X-Signature. Получатель пересчитывает и сравнивает в постоянное время.

// Node.js: проверка webhook-подписи и защита от replay
const crypto = require('crypto');

function verifyWebhook(req, secret) {
  const signature = req.headers['x-signature'] || '';
  const timestamp = req.headers['x-timestamp'] || '';
  const body = req.rawBody; // сырое тело до JSON.parse

  // 1. Защита от replay: окно 300 секунд
  const now = Math.floor(Date.now() / 1000);
  if (Math.abs(now - Number(timestamp)) > 300) {
    return false;
  }

  // 2. Пересчитываем подпись от timestamp + body
  const expected = crypto
    .createHmac('sha256', secret)
    .update(timestamp + '.' + body)
    .digest('hex');

  const provided = signature.replace(/^sha256=/, '');

  // 3. Сравнение в постоянное время
  const a = Buffer.from(expected, 'hex');
  const b = Buffer.from(provided, 'hex');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Чек-лист безопасного приёмника

ПроверкаЗачем
Валидация HMAC-подписиПодтверждает, что payload от вашего провайдера
Окно таймстемпа (±300с)Защита от replay перехваченного запроса
timingSafeEqual для сравненияЗащита от timing-атак на подпись
Идемпотентность по event idДубли доставки не создают дублей инцидентов
Только SSL/TLS проверку на эндпоинтеPayload и подпись не читаются в открытом виде
Без проверки подписи webhook-эндпоинт — открытая дверь: злоумышленник может слать фейковые «сайт упал/восстановился» и сбивать вашу автоматику. HMAC + таймстемп закрывают и подделку, и replay.

Обработка событий up/down

После проверки подписи разведите события по типам: monitor.down — открыть инцидент, monitor.up — закрыть, ssl.expiring — создать задачу на обновление сертификата. Делайте обработку идемпотентной: провайдеры ретраят доставку, и один и тот же event может прийти дважды.

Webhooks в enterno.io

enterno.io отправляет webhook на события monitor.down, monitor.up, monitor.degraded, ssl.expiring, ssl.expired, domain.expiring. Каждый запрос подписан HMAC (X-*-Signature) с таймстемпом — проверяйте оба. Управлять подписками можно через REST API v4 (endpoint /api/v4/webhooks), включая тестовую отправку. Помимо webhook доступны Telegram, Slack, email, PagerDuty, Jira — webhook нужен, когда готовых интеграций мало и нужна своя логика.

FAQ

Чем webhook лучше готовой интеграции?

Готовая интеграция уведомляет в конкретный сервис. Webhook даёт полный контроль: своя маршрутизация, запуск автоматики, интеграция с любой системой по HTTP.

Обязательно ли проверять подпись?

Да. Без проверки HMAC любой, кто узнает ваш URL, сможет слать фейковые алерты. Подпись + таймстемп — обязательный минимум безопасности.

Зачем нужно окно таймстемпа?

Чтобы перехваченный валидный запрос нельзя было переотправить позже (replay-атака). Запросы старше ~300 секунд отклоняются даже с верной подписью.

Как протестировать приёмник webhook?

В enterno.io API v4 есть тестовая отправка события на webhook (action=test) — она шлёт реальный подписанный payload на ваш эндпоинт.

Заведите алерты в свою систему: настройте webhook на enterno.io/monitors и управляйте подписками через API v4. Полезное: лучшие практики алертинга, мониторинг аптайма API, мониторинг как код.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: Мониторинг
Мониторинг
План реагирования на инциденты: пошаговое руководство для веб-команд
16.03.2026 · 107 просм.
Мониторинг
Лучший бесплатный мониторинг аптайма 2026
15.06.2026 · 17 просм.
Мониторинг
Мониторинг сайтов для веб-агентств
15.06.2026 · 14 просм.
Мониторинг
Лучшие практики алертинга для мониторинга сайтов
14.03.2026 · 186 просм.