Вебхуки: обработка пользовательских событий

Интегрируйте StatusPulse с вашими внутренними инструментами, системами тикетов и каналами оповещений через мощные и безопасные HTTP-хуки.

Настройка вебхуков

Вебхуки позволяют мгновенно реагировать на события мониторинга, отправляя HTTP POST-запросы на указанные вами конечные точки. Это критически важно для автоматизации DevOps-процессов и сокращения времени реакции на инциденты (MTTR).

Для настройки перейдите в раздел Настройки → Интеграции → Вебхуки. Вы можете создать отдельные вебхуки для разных сред (Production, Staging) или типов событий.

  • URL конечной точки: Адрес вашего сервера, принимающего запросы (должен поддерживать HTTPS).
  • Фильтрация событий: Выберите, какие триггеры должны активировать хук (например, только incidents.created).
  • Повторные попытки: StatusPulse автоматически повторяет запрос 3 раза с экспоненциальной задержкой (10с, 30с, 120с) в случае ошибки 5xx.

Совет: Используйте инструменты вроде webhook.site для тестирования перед развертыванием в production.

Формат полезной нагрузки (JSON Payload)

Все вебхуки отправляют данные в формате JSON. Структура стандартизирована для удобства парсинга вашими сервисами.

Пример полезной нагрузки для события incident.created:

{
  "id": "evt_8f7d6s5a4b3c",
  "type": "incident.created",
  "timestamp": "2023-10-27T14:30:00Z",
  "data": {
    "incident": {
      "id": "inc_12345",
      "status": "investigating",
      "severity": "critical",
      "title": "Сбой базы данных на кластере EU-West",
      "affected_services": [
        "api.statuspulse.io",
        "db-primary-01"
      ],
      "monitor_id": "mon_98765",
      "response_time": null,
      "error_code": 503
    }
  }
}

Основные поля: type определяет природу события, а объект data содержит детальную информацию о конкретном инциденте, мониторе или сервисе.

Безопасность и верификация подписи

Чтобы убедиться, что запрос действительно исходит от StatusPulse, мы подписываем каждый вебхук с использованием HMAC-SHA256.

В заголовке каждого запроса присутствует поле X-StatusPulse-Signature. Для проверки подлинности вы должны вычислить HMAC-подпись тела запроса (payload) с использованием вашего секретного ключа (whsec_...), который можно найти в настройках вебхука.

Пример алгоритма проверки (Node.js):

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  const digest = 'sha256=' + hmac.update(payload).digest('hex');
  
  return crypto.timingSafeEqual(
    Buffer.from(signature), 
    Buffer.from(digest)
  );
}

Важно: Никогда не храните секретные ключи в открытом виде в репозиториях кода. Используйте переменные окружения.