Подробный гайд: Создание и настройка дашбордов Grafana для БД, Apache и Wazuh
Ниже представлена пошаговая инструкция по развертыванию, настройке и кастомизации дашбордов Grafana для мониторинга баз данных, веб-сервера Apache и SIEM-системы Wazuh. Гайд ориентирован на Grafana v10/v11, современные экспортеры и production-практики 2025–2026 гг.
1. Подготовка инфраструктуры
1.1. Установка Grafana
# Debian/Ubuntu
sudo apt install -y apt-transport-https software-properties-common
wget -q -O - https://apt.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install -y grafana
sudo systemctl enable --now grafana-server
Доступ по умолчанию: http://<ip>:3000 (admin/admin).
1.2. Подключение источников данных (Data Sources)
| Компонент | Рекомендуемый источник | Плагин/Экспортер |
|---|---|---|
| БД (MySQL/PG) | Prometheus | mysqld_exporter, postgres_exporter |
| Apache | Prometheus | apache_exporter или Telegraf |
| Wazuh | Elasticsearch / OpenSearch | Встроенный плагин Grafana Elasticsearch |
Безопасность:
- Используйте Service Accounts в Grafana, TLS для всех DS, ограничьте права чтения на уровне индексов/таблиц.
2. Мониторинг баз данных (MySQL / PostgreSQL)
2.1. Настройка экспортера (на примере PostgreSQL)
# Установка postgres_exporter
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz
tar -xvf postgres_exporter-*.tar.gz
cd postgres_exporter-*
./postgres_exporter --web.listen-address=":9187" \
--collector.stat_user_indexes \
--collector.replication
Добавьте в Prometheus scrape_configs:
- job_name: 'postgres'
static_configs:
- targets: ['db-host:9187']
2.2. Ключевые метрики и PromQL-запросы
| Метрика | PromQL |
|---|---|
| Активные соединения | pg_stat_activity_count{datname="$db"} |
| Hit ratio buffer cache | rate(pg_stat_database_blks_hit[$interval]) / (rate(pg_stat_database_blks_hit[$interval]) + rate(pg_stat_database_blks_read[$interval])) * 100 |
| Медленные запросы (лог) | rate(pg_stat_statements_total_time{query=~".*SLOW.*"}[5m]) |
| Lag репликации (сек) | pg_replication_lag_seconds |
| I/O на диски | rate(pg_stat_database_tup_returned[5m]) + rate(pg_stat_database_tup_fetched[5m]) |
2.3. Готовые дашборды
- PostgreSQL:
ID 9628(официальный от Prometheus Community) - MySQL:
ID 7362(Percona) > В Grafana:+ → Import → введите ID → выберите Prometheus DS
3. Мониторинг Apache HTTP Server
3.1. Включение mod_status и экспортер
/etc/apache2/mods-enabled/status.conf:
<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1 ::1 10.0.0.0/8 # ваш подсеть мониторинга
</Location>
Установите apache_exporter:
wget https://github.com/Lusitaniae/apache_exporter/releases/download/v1.0.7/apache_exporter-1.0.7.linux-amd64.tar.gz
tar -xvf apache_exporter-*.tar.gz
./apache_exporter --scrape_uri="http://localhost/server-status?auto"
3.2. Ключевые метрики
| Метрика | PromQL |
|---|---|
| Requests/sec | rate(apache_requests_total[5m]) |
| Workers: Busy / Idle | apache_scoreboard{state="busy"} / apache_scoreboard{state="idle"} |
| Response codes (2xx/4xx/5xx) | rate(apache_requests_total{code=~"2.."}[5m]) |
| Bytes served | rate(apache_accesses_total{method="GET"}[5m]) |
| Uptime | apache_uptime_seconds_total |
3.3. Готовые дашборды
- Apache Overview:
ID 3894или10417 - Для продвинутого анализа подключите
nginx-exporterлоги черезLoki+Grafana Logs
4. Интеграция Wazuh (SIEM / Security Monitoring)
Официально Wazuh рекомендует Kibana, но полная поддержка Grafana возможна через Elasticsearch/OpenSearch datasource и JSON-дашборды из репозитория сообщества.
4.1. Настройка DataSource в Grafana
Configuration → Data Sources → Add Elasticsearch- URL:
https://<wazuh-indexer-ip>:9200 - Auth: Basic Auth (пользователь
adminилиkibanaserverиз Wazuh) - Index name:
wazuh-alerts-* - Включите
Time field name:timestamp - Тест соединения → Save
4.2. Ключевые поля и запросы (Elasticsearch DSL в Grafana)
| Панель | Query (Lucene / JSON) |
|---|---|
| Alerts by severity | rule.level: [>=10] → Group by rule.level |
| Top agents | agent.name:* → Terms aggregation на agent.name |
| MITRE ATT&CK mapping | rule.mitre.id:* → Split by rule.mitre.tactic |
| File integrity changes | rule.groups: "fim" → Time series на data.path |
| Failed SSH logins | rule.id: 5710 OR rule.id: 5712 → Table с data.srcip, data.user |
4.3. Импорт готовых дашбордов
- Скачайте JSON-дашборды: github.com/wazuh/wazuh-grafana-dashboards (или актуальный форк сообщества)
+ → Import → Upload JSON- При импорте выберите созданный
Elasticsearchdatasource - Настройте переменные (
$agent,$rule.level,$time) для фильтрации
5. Создание и кастомизация дашбордов
5.1. Шаблонизация (Variables)
Позволяет переключать хосты, БД, агентов без правки панелей.
Name: $instance
Type: Query
Data source: Prometheus
Query: label_values(up{job=~"mysql|postgres|apache"}, instance)
Multi-value: Include All option:
5.2. Рекомендуемые типы панелей
| Задача | Panel Type |
|---|---|
| Тренды метрик | Time series |
| Текущее состояние | Stat / Gauge |
| Распределение | Bar chart / Pie |
| Топ-запросы/агенты | Table |
| Карты угроз (Wazuh) | Geomap / Heatmap |
5.3. Thresholds & Overrides
- Задавайте пороги прямо в панели (
Thresholds → Base → Warning → Critical) - Используйте
Overridesдля условного форматирования строк в таблицах
6. Настройка алертинга (Grafana Alerting v10+)
Alerting → Contact points → Add(Telegram, Slack, Email, Webhook)Alerting → Notification policies → Default→ привяжите Contact point
3. На панели: Panel → Alert → Create alert
- Condition:
WHEN last() OF query(A, 5m, now) IS ABOVE 90 - Labels:
team: infra, env: prod, service: db - Annotations:
{{ $labels.instance }} high connections
- Тест через
Evaluate now
Для Wazuh алертов используйте
Elasticsearchquery в Condition:rule.level >= 12 AND agent.status != active
7. Лучшие практики для Production
| Область | Рекомендация |
|---|---|
| Хранение | Используйте Grafana Provisioning (dashboards/, datasources/ в YAML) |
| Версионирование | Дашборды храните в Git (JSON), деплойте через CI/CD |
| Производительность | Ограничьте Max data points, используйте $__interval, избегайте * в query |
| Безопасность | Отключите анонимный доступ, настройте LDAP/OAuth, ротацию токенов DS |
| Резервное копирование | grafana-cli backup, или экспорт sqlite/postgres дампа Grafana DB |
| Логирование | Включите grafana.log.level = info, мониторинг самой Grafana через node_exporter |
Чек-лист запуска
- [ ] Grafana v10+ установлен, доступ защищен
- [ ] Prometheus / Elasticsearch подключены как Data Sources
- [ ] Экспортеры БД и Apache запущены и скрейпятся
- [ ] Индекс
wazuh-alerts-*доступен в Grafana - [ ] Импортированы baseline-дашборды, настроены переменные
- [ ] Созданы Contact points и Alert rules
- [ ] Дашборды вынесены в provisioning + Git
- [ ] Проведен нагрузочный тест + проверка алертов