Подробный гайд: Создание и настройка дашбордов Grafana для БД, Apache и Wazuh

Подробный гайд по настройке дашбордов Grafana для мониторинга БД, Apache и Wazuh. Установка, метрики, PromQL, дашборды, алертинг

2026.04.19                  


Подробный гайд: Создание и настройка дашбордов Grafana для БД, Apache и WazuhПодробный гайд: Создание и настройка дашбордов 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

  1. Configuration → Data Sources → Add Elasticsearch
  2. URL: https://<wazuh-indexer-ip>:9200
  3. Auth: Basic Auth (пользователь admin или kibanaserver из Wazuh)
  4. Index name: wazuh-alerts-*
  5. Включите Time field name: timestamp
  6. Тест соединения → 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. Импорт готовых дашбордов

  1. Скачайте JSON-дашборды: github.com/wazuh/wazuh-grafana-dashboards (или актуальный форк сообщества)
  2. + → Import → Upload JSON
  3. При импорте выберите созданный Elasticsearch datasource
  4. Настройте переменные ($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+)

  1. Alerting → Contact points → Add (Telegram, Slack, Email, Webhook)
  2. 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
  1. Тест через Evaluate now

Для Wazuh алертов используйте Elasticsearch query в 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
  • [ ] Проведен нагрузочный тест + проверка алертов