Files
onGuard24/docs/IRM.md
Alexandr 18ba48e8d0
Some checks failed
CI / test (push) Successful in 43s
Deploy / deploy (push) Failing after 17s
release: v1.10.0 — модуль команд (teams), team_id на алертах
- Alembic 006: teams, team_label_rules, irm_alerts.team_id
- Вебхук: сопоставление команды по правилам лейблов (priority)
- API/UI Команды; алерты: JOIN team, фильтр team_id
- Тесты test_team_match, test_teams_api; обновлён test_root_ui

Made-with: Cursor
2026-04-03 15:34:46 +03:00

5.5 KiB
Raw Blame History

IRM: функционал, назначение и реализация в onGuard24

Краткий ориентир для разработки (аналог облачного IRM: инциденты, задачи, эскалации, дежурства).

Матрица: что это, зачем, как у нас, что в Grafana

Область Назначение onGuard24 Grafana / внешнее
Инциденты Учёт сбоев, статусы (open → resolved), связь с алертами Модуль incidents: incidents, incident_alert_links, API, UI; создание вручную или с alert_ids См. Алерты; IRM_GRAFANA_PARITY.md
Алерты (IRM) Приём, Ack/Resolve, не смешивать с инцидентом Модуль alerts: irm_alerts, UI/API, вебхук пишет в одной транзакции с ingress_events Grafana IRM Alert Groups; у нас без группировки/эскалации на уровне алерта
Задачи Подзадачи по инциденту (разбор, фикс) Модуль tasks: таблица tasks, привязка к incident_id Опционально: ссылки из алерта; основная работа в onGuard24
Цепочки эскалаций Кого звать и в каком порядке при таймаутах Модуль escalations: таблица escalation_policies (JSON steps), API/UI заготовка Маршрутизация уведомлений может дублироваться в Grafana contact points; целевая логика — в onGuard24
Команды (teams) Фильтр и маршрутизация как в IRM Модуль teams: teams, team_label_rules, irm_alerts.team_id; правила по лейблам при вебхуке Колонка Team в Grafana IRM; у нас сопоставление по label_key = label_value
Календарь дежурств Кто в смене, расписание Модуль schedules (развитие) Календари/команды — данные в onGuard24; уведомления — через интеграции
Контакты Люди, каналы Модуль contacts Получатели в Contact points (email, Slack, webhook)
Светофор / статус сервисов Агрегат здоровья Модуль statusboard Источник метрик — Prometheus/Loki; правила — Grafana
Группы алертов Группировка шумных алертов План: отдельная сущность / правила Alertmanager / группировка в Grafana Alerting
Интеграции Внешние системы integrations/, статус в /api/v1/status API-ключи Grafana, Vault, Forgejo в .env
Пользователи / права RBAC Пока нет SSO Grafana, сеть за reverse proxy
SLO Цели по доступности Вне скоупа v1 Grafana SLO / Mimir

Поток данных (как в Grafana IRM)

  1. Grafana срабатывает правило → JSON на webhook onGuard24.
  2. В одной транзакции: ingress_events + irm_alerts (статус firing), публикуется alert.received.
  3. Дежурный в модуле Алерты читает заголовок, лейблы, Acknowledge / Resolve — это не создание инцидента.
  4. Инцидент создаётся отдельно (вручную или из карточки алерта), опционально с привязкой alert_ids. Авто-инцидент из вебхука только при AUTO_INCIDENT_FROM_ALERT=1 (legacy).

Что настроить в Grafana (обязательно для приёма алертов)

Один URL для всех инстансов и организаций

  1. Contact point → Webhook, URL: https://<ваш-хост>/api/v1/ingress/grafana (POST). Не нужно заводить slug в .env: источник в БД определяется из JSON Grafana — externalURL (хост Grafana), при наличии orgId / org_id, иначе лейблы первого алерта (__org_id__, grafana_org, tenant, cluster, namespace).
  2. В grafana.ini / настройках сервера корректно задайте root_url / external URL, чтобы в вебхук попадал нужный хост (за NPM — публичный URL).
  3. Опционально X-OnGuard-Secret (если задан GRAFANA_WEBHOOK_SECRET) и X-OnGuard-Service (имя сервиса в инциденте).
  4. Notification policies — привязать правила к contact point.

Дополнительно: путь /ingress/grafana/<slug>

Явный ярлык в URL не требует записи в GRAFANA_SOURCES_JSON. GRAFANA_SOURCES_JSON нужен в основном для /api/v1/status (проверка API каждого инстанса) и для отдельного webhook_secret на slug.

Подробнее: MODULES.md, DOMAIN.md.