# grafana_gen Утилита автоматической генерации Grafana-дашбордов и правил алертинга для клиентов WAF/PTAF. ## Что делает - Читает список клиентов и их SID из PostgreSQL (`sp_info` + `manual_info`) - Генерирует дашборд для **OpenSearch** и/или **VictoriaLogs** datasource (независимо) - Создаёт правила алертинга для OS и/или VL: RPS, 4xx/5xx ошибки (пороги из БД), CPU, RAM, диск, контейнеры, Angie - Обновляет шаблоны дашборда и алертов из Git-репозитория при каждом запуске - Пропускает запуск если ничего не изменилось (отслеживает хэши) - Валидирует и автоисправляет критичные настройки шаблона при каждом запуске ## Быстрый старт ```bash # Минимальный запуск ./grafana_gen \ -db-user=reader \ -db-password=secret \ -grafana-url=https://grafana.example.com \ -grafana-api-key=glsa-xxx # Или через .env файл (приоритет ниже переменных окружения) cp grafana_gen.env.example /etc/grafana_gen/grafana_gen.env ./grafana_gen ``` ## Конфигурация Параметры разрешаются в порядке приоритета: **флаг → переменная окружения → .env файл → константа в config.go** Минимально необходимые параметры: | Параметр | Флаг | Переменная окружения | |---|---|---| | PostgreSQL пользователь | `-db-user` | `DB_USER` | | PostgreSQL пароль | `-db-password` | `DB_PASSWORD` | | URL Grafana | `-grafana-url` | `GRAFANA_URL` | | Grafana API ключ | `-grafana-api-key` | `GRAFANA_API_KEY` | Пример `.env` файла: ```env DB_USER=grafana_reader DB_PASSWORD=secret GRAFANA_URL=https://grafana.example.com GRAFANA_API_KEY=glsa-xxxxxxxxxxxxxxxxxxxx GIT_TOKEN=your-gitea-token # VictoriaLogs (опционально) VL_DATASOURCE_UID=efewdonokxybkf VL_DASHBOARD_TITLE=PT AF Requests (VictoriaLogs) # Управление генерацией DASHBOARD_OS_ENABLED=true DASHBOARD_VL_ENABLED=true ALERTS_OS_ENABLED=true ALERTS_VL_ENABLED=true ``` ## Полезные флаги ```bash -dry-run # Сгенерировать и показать в логах, не отправлять в Grafana -force # Пересоздать всё даже если изменений нет -skip-git-pull # Не обновлять шаблоны из Git ``` ## Управление генерацией через переменные окружения Можно независимо включать и отключать генерацию дашбордов и алертов: | Переменная | По умолчанию | Описание | |---|---|---| | `DASHBOARD_OS_ENABLED` | `true` | Генерировать дашборд для OpenSearch | | `DASHBOARD_VL_ENABLED` | `true` | Генерировать дашборд для VictoriaLogs | | `ALERTS_OS_ENABLED` | `true` | Генерировать алерты для OpenSearch | | `ALERTS_VL_ENABLED` | `true` | Генерировать алерты для VictoriaLogs | Пример — только VL дашборд и VL алерты: ```env DASHBOARD_OS_ENABLED=false ALERTS_OS_ENABLED=false ``` ## VictoriaLogs дашборд При наличии `VL_DATASOURCE_UID` генерируется второй дашборд с теми же панелями но на базе VictoriaLogs datasource и LogsQL запросов. Дашборд содержит дополнительные секции: - **PTAF-Nginx** (обзорные панели) — статус коды, запросы по нодам/тенантам, топ URI, сравнение nginx vs angie - **Angie** — панели ошибок из `log_type:angie-error-PTAF` ## Шаблоны Дашборд и алерты строятся по JSON-шаблонам из Git-репозитория: - `dashboard_template.json` — структура и панели дашборда - `alert_rules_template.json` — правила алертинга Изменение любого шаблона автоматически триггерит пересоздание при следующем запуске. ### Валидатор шаблона При каждом запуске `template_validator.go` автоматически проверяет и исправляет критичные настройки шаблона: - `vl_interval: "1m"` для панелей RPS, status_codes, response_time, traffic - `spanNulls: true` для панели status_codes - `vl_base_query` с переменными тенанта/ноды для обзорных панелей - Layout в три столбца (8+8+8) для tenant и domain панелей Это защищает от потери настроек при обновлении шаблона из Git. ## Подробнее См. [ARCHITECTURE.md](ARCHITECTURE.md).