grafana_gen/README.md
2026-04-16 15:21:43 +03:00

118 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).