118 lines
5.2 KiB
Markdown
118 lines
5.2 KiB
Markdown
# 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).
|