IncidentRelay: self-hosted on-call, alert routing и уведомления без SaaS и канадских номеров

от автора

Привет, Habr!

Мы разрабатываем IncidentRelay — self-hosted систему для on-call scheduling, маршрутизации алертов и доставки уведомлений. Идея простая: дать командам SRE, DevOps, platform и operations понятный инструмент, который можно развернуть у себя, подключить к мониторингу и использовать без зависимости от внешней incident-management платформы.

Зачем еще один инструмент для алертов

Во многих командах алерты уже есть: Prometheus Alertmanager, Zabbix, webhooks от внутренних систем. Но между “система что-то прислала” и “ответственный человек это увидел, подтвердил и решил” часто остается много ручной логики:

  • кто сейчас on-call;

  • куда отправлять уведомление;

  • что делать, если человек не ответил;

  • как временно заменить дежурного;

  • как не потерять историю ACK / Resolve;

  • как не отдавать alert flow внешнему SaaS.

IncidentRelay закрывает этот промежуток.

Базовый поток выглядит так:

Monitoring system -> Route -> Team -> Rotation -> Notifications -> ACK / Resolve

Что такое IncidentRelay

IncidentRelay — это self-hosted веб-приложение и API для управления incident workflow.

Внутри есть несколько ключевых сущностей:

  • Groups — границы доступа и RBAC.

  • Teams — операционные команды.

  • Rotations — on-call графики и смены.

  • Routes — точки приема алертов с собственными intake tokens.

  • Services — затронутые системы и контекст влияния.

  • Channels — Mattermost, Telegram, email, webhook, voice call и другие способы доставки.

  • Alerts — события, которые можно acknowledge или resolve.

  • Silences — подавление шумных или известных алертов.

  • Escalations — повторные уведомления и переход к следующему ответственному.

Маршруты получают алерты, команды и ротации определяют ответственного, а каналы доставляют уведомления.

Интеграции

На входе поддерживаются:

  • Prometheus Alertmanager;

  • Zabbix;

  • generic webhook.

Для уведомлений доступны:

  • Mattermost;

  • Telegram;

  • Slack;

  • Discord;

  • Microsoft Teams;

  • email;

  • generic webhook;

  • voice call через pluggable provider API;

  • browser/PWA push для assigned user.

Browser push работает на уровне профиля пользователя, а не как обычный route channel. Пользователь включает push в профиле, после чего IncidentRelay может отправлять уведомления на его активные browser/PWA устройства.

On-call и routing

В IncidentRelay route имеет собственный intake token. Это помогает явно понимать, какой внешний источник имеет право создавать алерты в конкретном маршруте.

Ротации поддерживают on-call scheduling, overrides и layered schedules. Это полезно, когда у команды есть несколько уровней дежурства, временные замены или разные правила для разных периодов.

Если алерт не подтвержден, система может отправлять reminders и запускать escalation flow.

Почему self-hosted

Self-hosted подход важен не всем, но для некоторых команд он критичен:

  • алерты не уходят во внешний SaaS;

  • данные остаются внутри инфраструктуры;

  • можно контролировать сеть, БД, логи и доступы;

  • проще встроить систему в собственные operational policies;

  • можно дорабатывать интеграции под свои процессы.

IncidentRelay можно запускать через Docker Compose или устанавливать на RedHat-like дистрибутивы из RPM-репозитория. Также есть manual systemd установка.

API-first

У проекта есть Swagger/OpenAPI документация и personal API tokens. Это позволяет не только работать через UI, но и автоматизировать создание ресурсов, интеграции и внутренние процессы.

Для voice call предусмотрен provider API: можно подключить собственный провайдер звонков, реализовать callback-и, DTMF-действия и ACK / Resolve по кнопкам телефона.

Текущий статус

IncidentRelay сейчас находится в beta. Это значит, что API, схема БД, UI и конфигурация еще могут меняться. Но основные блоки уже есть: маршрутизация алертов, on-call ротации, уведомления, escalation, silences, service context, browser push и документация.

Проект открыт на GitHub:

https://github.com/roxy-wi/IncidentRelay

Документация:

https://incidentrelay.io/docs/

Для кого это может быть полезно

IncidentRelay может подойти, если:

  • вы хотите self-hosted alternative для incident workflow;

  • у вас уже есть Alertmanager, Zabbix или webhook-based monitoring;

  • нужно маршрутизировать алерты по командам и ротациям;

  • хочется иметь ACK / Resolve, reminders и escalation;

  • SaaS для алертов нежелателен по требованиям безопасности или инфраструктуры;

  • нужна возможность доработать уведомления и интеграции под себя.

Заключение

IncidentRelay не пытается быть огромной incident-management платформой “для всего”. Мы скорее идем от практического сценария: принять алерт, понять команду и ответственного, доставить уведомление, дать возможность подтвердить или закрыть событие и сохранить контроль внутри своей инфраструктуры.

Будем рады обратной связи, идеям и issue на GitHub.

ссылка на оригинал статьи https://habr.com/ru/articles/1044068/