v1.5.0: IRM — инциденты, задачи, эскалации
- docs/IRM.md; Alembic 002: incidents, tasks, escalation_policies - Модули incidents/tasks/escalations: API, UI, register_events(bus, pool) - Авто-инцидент из alert.received; тесты test_irm_modules.py Made-with: Cursor
This commit is contained in:
@ -20,7 +20,7 @@ onGuard24/
|
||||
│ ├── integrations/
|
||||
│ │ ├── grafana_api.py # Grafana HTTP API (Bearer SA)
|
||||
│ │ └── forgejo_api.py # Forgejo/Gitea API (token + probe/fallback)
|
||||
│ └── modules/ # API + ui_router + registry + ui_support (фрагменты главной)
|
||||
│ └── modules/ # IRM: incidents, tasks, escalations, … + registry + ui_support
|
||||
├── web/ # Vite + React (опционально)
|
||||
├── pyproject.toml
|
||||
├── pytest.ini
|
||||
|
||||
32
docs/IRM.md
Normal file
32
docs/IRM.md
Normal file
@ -0,0 +1,32 @@
|
||||
# IRM: функционал, назначение и реализация в onGuard24
|
||||
|
||||
Краткий ориентир для разработки (аналог облачного IRM: инциденты, задачи, эскалации, дежурства).
|
||||
|
||||
## Матрица: что это, зачем, как у нас, что в Grafana
|
||||
|
||||
| Область | Назначение | onGuard24 | Grafana / внешнее |
|
||||
|---------|------------|-----------|-------------------|
|
||||
| **Инциденты** | Учёт сбоев, статусы (open → resolved), связь с алертом | Модуль `incidents`: таблица `incidents`, API, UI, авто-создание из `alert.received` | Contact point **Webhook** → `POST /api/v1/ingress/grafana`; правила алертинга в Grafana |
|
||||
| **Задачи** | Подзадачи по инциденту (разбор, фикс) | Модуль `tasks`: таблица `tasks`, привязка к `incident_id` | Опционально: ссылки из алерта; основная работа в onGuard24 |
|
||||
| **Цепочки эскалаций** | Кого звать и в каком порядке при таймаутах | Модуль `escalations`: таблица `escalation_policies` (JSON `steps`), API/UI заготовка | Маршрутизация уведомлений может дублироваться в Grafana contact points; целевая логика — в onGuard24 |
|
||||
| **Календарь дежурств** | Кто в смене, расписание | Модуль `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 |
|
||||
|
||||
## Поток данных (алерт → инцидент)
|
||||
|
||||
1. Grafana срабатывает правило → шлёт JSON на **webhook** onGuard24.
|
||||
2. Сервис пишет строку в `ingress_events`, публикует **`alert.received`**.
|
||||
3. Модуль **incidents** подписан на событие и создаёт запись в **`incidents`** с ссылкой на `ingress_event_id`.
|
||||
|
||||
## Что настроить в Grafana (обязательно для приёма алертов)
|
||||
|
||||
1. **Alerting → Contact points → New** — тип **Webhook**, URL: `https://<ваш-хост>/api/v1/ingress/grafana`, метод POST, Optional HTTP headers если задан `GRAFANA_WEBHOOK_SECRET`: `X-OnGuard-Secret: <секрет>`.
|
||||
2. **Notification policies** — направить нужные правила на этот contact point (или default policy).
|
||||
3. Убедиться, что сеть до onGuard24 доступна (firewall, TLS).
|
||||
|
||||
Подробнее: [MODULES.md](MODULES.md), [DOMAIN.md](DOMAIN.md).
|
||||
@ -33,7 +33,7 @@
|
||||
- `router` — JSON API под `/api/v1/modules/<имя>/`.
|
||||
- Опционально **`ui_router`** — `APIRouter(include_in_schema=False)`, маршруты полных HTML-страниц (корень `/` → `/ui/modules/<slug>/`).
|
||||
- Опционально **`async def render_home_fragment(request) -> str`** — HTML-фрагмент (без `<html>`) для карточки на главной.
|
||||
- **`register_events(_bus)`** — подписки на шину.
|
||||
- **`register_events(bus, pool)`** — подписки на шину; при необходимости используйте **`pool`** для записи в БД из обработчика события.
|
||||
|
||||
2. **Регистрация** в **`onguard24/modules/registry.py`** — объект **`ModuleMount`**:
|
||||
- `router`, `url_prefix`, `register_events`, **`slug`**, **`title`**, опционально **`ui_router`**, **`render_home_fragment`**.
|
||||
|
||||
Reference in New Issue
Block a user