Документация IncidentRelay#
IncidentRelay — это self-hosted сервис для планирования дежурств (on-call), маршрутизации алертов и уведомлений. Он хранит команды, ротации, маршруты, каналы уведомлений, подписки на браузерные push-уведомления, подтверждения (ACK), разрешения (Resolve), временное откладывание алертов (Shelve), напоминания и эскалации внутри вашей собственной инфраструктуры.
Поток алертов#
Monitoring system
-> Incoming integration endpoint
-> Route intake token
-> Route match
-> Service
-> Team and rotation
-> Assigned on-call user
-> Notification channels and profile browser push
-> ACK / Resolve / Shelve
Браузерные push-уведомления включаются пользователями в профиле и доставляются автоматически назначенным пользователям. Они не являются каналами маршрута.
Способы установки#
Выберите один способ установки:
| Способ | Рекомендуется для | Начните здесь |
|---|---|---|
| Docker Compose | быстрый старт, тестирование, простые self-hosted развёртывания | Установка через Docker |
| RPM package | RHEL, Rocky Linux, AlmaLinux, CentOS Stream | Установка через RPM |
| Manual systemd | развёртывание из исходников, собственное окружение Python, классическая Linux VM | Ручная установка через systemd |
Все production-установки должны запускать два процесса:
incidentrelay # HTTP API, UI, incoming webhooks
incidentrelay-scheduler # reminders, escalations, periodic jobs
Не запускайте задачи планировщика внутри каждого веб-воркера.
Настройка#
IncidentRelay читает путь к конфигурации из:
INCIDENTRELAY_CONFIG_FILE
Пример:
export INCIDENTRELAY_CONFIG_FILE=/etc/incidentrelay/incidentrelay.conf
Старое имя ONCALL_CONFIG_FILE использовать не следует.
Подробнее: Настройка.
Для браузерных/PWA-уведомлений настройте [browser_push] и ключи VAPID. Подробнее: Браузерные push-уведомления.
Основные понятия#
| Понятие | Описание |
|---|---|
| Group | Граница доступа и область администрирования на уровне группы |
| User | Человек, который может входить в систему, дежурить, получать уведомления, включать браузерные push-уведомления или использовать персональные API-токены |
| Team | Операционная единица внутри группы |
| Rotation | Расписание дежурств для команды |
| Route | Правило маршрутизации алертов с собственным токеном приёма |
| Channel | Цель исходящих уведомлений, например Mattermost, Telegram, email, вебхук или голосовой вызов |
| Browser push | Доставка браузерных/PWA-уведомлений на уровне профиля для назначенных пользователей |
| Alert | Алерт IncidentRelay, созданный из входящей интеграции |
| Silence | Правило, подавляющее уведомления для совпадающих новых алертов |
| Shelve | Временная responder-пауза для одного существующего AlertGroup без изменения технического статуса и impact |
| Override | Временная замена участника ротации |
Подробнее:
- Группы и RBAC
- Команды, ротации и маршруты
- Токены приёма маршрутов
- Каналы
- Браузерные push-уведомления
- Shelving алертов
- Напоминания и эскалации
- Event Orchestration
Сводка по RBAC#
IncidentRelay использует два уровня разрешений:
| Уровень | Назначение |
|---|---|
| Group role | Определяет границу доступа и администрирование пользователей на уровне группы |
| Team role | Определяет, что пользователь может делать внутри конкретной команды |
Текущие названия ролей:
Group roles: viewer, editor, user_admin
Team roles: viewer, responder, manager
Важные правила:
- Пользователь должен состоять в группе, прежде чем его можно будет добавить в команду этой группы.
- Добавление пользователя в команду не добавляет пользователя в группу автоматически.
user_adminможет создавать пользователей только в пределах границы выбранной группы.editorможет создавать команды в группе, но не управляет автоматически всеми командами.manager— это роль записи для конкретной команды.responderможет подтверждать, разрешать или временно откладывать алерты без изменения настроек команды.
Подробнее: Группы и RBAC.
Интеграции#
В IncidentRelay есть два уровня интеграций.
Источники входящих алертов#
| Источник | Эндпоинт | Документация |
|---|---|---|
| Alertmanager | POST /api/integrations/alertmanager | Alertmanager |
| AWS SNS/Cloud watch | POST /api/integrations/aws-sns | AWS SNS/Cloud watch |
| Grafana | POST /api/integrations/grafana | Grafana |
| RMON | POST /api/integrations/rmon | Grafana |
| Zabbix | POST /api/integrations/zabbix | Zabbix |
| Sentry | POST /api/integrations/sentry/<route_id> | Sentry |
| LibreNMS | POST /api/integrations/librenms | LibreNMS |
| Generic webhook | POST /api/integrations/webhook | Generic webhook |
Входящие интеграции используют токены приёма маршрутов (route intake token).
Доставка уведомлений#
| Способ доставки | Документация |
|---|---|
| Общее поведение каналов | Каналы уведомлений |
| Mattermost | Mattermost |
| Telegram | Telegram |
| Slack | Slack |
| Discord, Microsoft Teams, кастомный вебхук | Каналы на основе вебхуков |
| Голосовой вызов | Голосовой вызов |
| Браузерные/PWA push | Браузерные push-уведомления |
У каналов уведомлений нет токенов приёма. Маршруты получают алерты, а затем отправляют уведомления в прикреплённые каналы. Браузерные push-уведомления действуют на уровне профиля и отправляются на активные браузерные устройства назначенного пользователя.
Синхронизация календаря#
| Способ синхронизации | Подходит для | Документация |
|---|---|---|
| CalDAV | Apple Calendar, Thunderbird, DAVx5 и другие CalDAV-клиенты | Синхронизация календаря по CalDAV |
| Подписной ICS-фид | Outlook, Google Calendar и подписки на веб-календари | ICS-фид календаря |
CalDAV использует персональные API-токены с областью calendar:read. ICS-фиды календаря используют секретные URL подписки и не требуют входа в систему.
Управление инцидентами#
- Алерты и группы алертов
- Приоритеты инцидентов
- Ответственные за инцидент
- Заинтересованные стороны инцидента
- Комментарии к алертам
- Заглушки (silences)
- Окна обслуживания
Сервисы#
Планирование#
API и автоматизация#
Swagger UI:
/docs
OpenAPI JSON:
/api/openapi.json
Полезные страницы:
- Обзор API
- API сервисов
- API политик эскалации
- API интеграции с Sentry
- Профиль и личные API-токены
- Браузерные push-уведомления
- Shelving алертов
- Заметки по OpenAPI для голосовых вызовов
Процесс первичной настройки#
1. Install IncidentRelay
2. Configure the service and public_base_url
3. Configure browser push VAPID keys if browser/PWA notifications are required
4. Run migrations
5. Create the first global admin
6. Create a group
7. Create or add users to the group
8. Assign group roles: viewer, editor, user_admin
9. Create a team
10. Add group users to the team
11. Assign team roles: viewer, responder, manager
12. Create a rotation
13. Add rotation members
14. Create a service
15. Add service links and runbooks
16. Create notification channels
17. Ask users to enable browser push in Profile if required
18. Create a route and attach channels
19. Select a default service or configure service match rules
20. Copy the route intake token
21. Configure Alertmanager, Zabbix or webhook sender
22. Send a test alert
23. Подтвердите, разрешите или временно отложите алерт
Подробнее: Первый вход и настройка.
Ссылки проекта#
- Репозиторий: https://github.com/roxy-wi/IncidentRelay
- Swagger UI:
/docs - OpenAPI JSON:
/api/openapi.json