Генератор SLO
Мастер создания SLO (SLO Generator Wizard) — пошаговый интерфейс для создания новых SLO и генерации готовых к использованию конфигурационных файлов для стека мониторинга.
Возможности
- Пошаговый мастер — форма с валидацией на каждом шаге
- Пресеты burn rate — предварительно настроенные пороги оповещений (2x/1ч, 6x/6ч, 10x/5м, 20x/30м)
- Поддержка шаблонов — выбор из встроенных шаблонов сервисов для автозаполнения формы
- Генерация конфигов — автоматическая генерация OpenSLO YAML, правил оповещений Prometheus, конфигурации Alertmanager и дашбордов Grafana
Доступ к мастеру
Перейдите в SLO Management → New SLO в боковом меню или нажмите SLO Wizard на странице списка SLO.
URL: /slos/new
Шаги мастера
Шаг 1: Сервис
| Поле | Описание |
|---|---|
| Service Name | Название сервиса (например, payment-service, api-gateway) |
| Service Description | Описание сервиса (необязательно) |
| SLO Name | Название SLO (например, api-latency, uptime) |
| SLO Description | Что измеряет этот SLO |
| Team | Выбор ответственной команды |
Шаг 2: Определение SLO
| Поле | Описание |
|---|---|
| Indicator Type | Тип индикатора: availability, latency, throughput, custom |
| Target (%) | Целевое значение SLO (например, 99.9 для 99.9% доступности) |
| Time Window | Окно оценки: 1h, 24h, 7d, 30d, 90d |
| Threshold | Пороговое значение (например, 200ms для задержки) |
| Metric Query | PromQL-выражение для индикатора |
Поле метрического запроса показывает контекстные подсказки и примеры в зависимости от выбранного типа индикатора.
Шаг 3: Оповещения
Включите оповещения и выберите один или несколько порогов burn rate:
| Пресет | Rate | Period | Важность |
|---|---|---|---|
| 2x / 1h | 2x | 1ч | Warning |
| 6x / 6h | 6x | 6ч | Warning |
| 10x / 5m | 10x | 5м | Critical |
| 20x / 30m | 20x | 30м | Critical |
Также можно указать каналы уведомлений (например, telegram:12345, slack:#alerts).
Шаг 4: Проверка
Проверьте полную конфигурацию перед созданием SLO.
Шаг 5: Готово
После создания можно скачать ZIP-архив со сгенерированными файлами:
| Файл | Описание |
|---|---|
{service}-{slo}.yaml | OpenSLO v1alpha — спецификация SLO |
{service}-{slo}-prometheus-alerts.yaml | Правила оповещений Prometheus для burn rate |
{service}-{slo}-alertmanager-config.yaml | Пример конфигурации Alertmanager |
{service}-{slo}-grafana-dashboard.json | Основной дашборд Grafana (burn rate, error budget, алерты) |
{service}-{slo}-multi-burnrate-dashboard.json | Дашборд Grafana с несколькими порогами burn rate |
{service}-{slo}-README.md | Инструкции по настройке и документация |
API Endpoints
Создание SLO
Создаёт новый SLO из данных формы мастера.
POST /api/v1/slos/generate
{
"service_name": "payment-service",
"slo_name": "api-latency",
"target": 99.9,
"time_window": "30d",
"metric_type": "latency",
"metric_query": "histogram_quantile(0.95, ...)",
"threshold": "200ms",
"team_id": 1,
"alerting": {
"enabled": true,
"burn_rate_thresholds": [
{"rate": 2, "period": "1h", "severity": "warning"},
{"rate": 10, "period": "5m", "severity": "critical"}
]
}
}Ответ:
{
"id": 42,
"created_at": "2026-06-17T12:00:00Z",
"updated_at": "2026-06-17T12:00:00Z"
}Скачивание конфигов
Загружает ZIP-архив со сгенерированными конфигурационными файлами для существующего SLO.
GET /api/v1/slos/{id}/downloadВозвращает application/zip с заголовком Content-Disposition attachment.
Архитектура
Генератор реализован в пакете internal/generators/ и состоит из:
| Компонент | Файл | Описание |
|---|---|---|
| Оркестратор | generator.go | Координирует все генераторы, создаёт ZIP |
| OpenSLO | openslo.go | Генерирует OpenSLO v1alpha YAML |
| Prometheus | prometheus.go | Генерирует правила оповещений Prometheus |
| Alertmanager | alertmanager.go | Генерирует конфигурацию Alertmanager |
| Grafana | grafana.go | Генерирует JSON дашбордов Grafana |
| README | readme.go | Генерирует Markdown-документацию |
| Models | models.go | Общие типы для конфигурации генератора |
Обработчик находится в internal/handlers/slo.go:
GenerateSLO— принимает данные формы, создаёт SLO в БД, возвращает IDDownloadConfig— читает SLO из БД, генерирует конфиги, возвращает ZIP