Привет, 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/