Как настроить мониторинг серверов с помощью Prometheus и Grafana (базовый пример)
В продакшене важно не только настроить балансировку и отказоустойчивость, но и вовремя узнавать о проблемах.
Мониторинг даёт:
- контроль загрузки CPU, памяти, дисков и сетевых интерфейсов;
- предупреждения о росте ошибок и задержек;
- исторические графики для анализа трендов.
Комбо Prometheus + Grafana — де-факто стандарт в мире DevOps:
Prometheus собирает и хранит метрики, а Grafana визуализирует их в виде гибких дашбордов.
Архитектура решения
- Prometheus — time-series база данных и движок опроса (pull-model). Сам ходит к экспортерам за метриками по HTTP.
- Node Exporter — агент на каждом сервере, отдающий системные метрики.
- Grafana — веб-интерфейс для построения графиков и алертов.
Минимальный сценарий:
[Server 1] -- Node Exporter -->
[Server 2] -- Node Exporter --> Prometheus --> Grafana (дашборды)
Установка Prometheus и Node Exporter
1. Prometheus
На сервере мониторинга (Ubuntu/Debian):
sudo useradd --no-create-home --shell /bin/false prometheus
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-*.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
sudo mv prometheus-*/{prometheus,promtool} /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv prometheus-*/{consoles,console_libraries,prometheus.yml} /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Сервис systemd /etc/systemd/system/prometheus.service
:
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
Prometheus по умолчанию доступен на http://<host>:9090
.
2. Node Exporter (на каждом наблюдаемом сервере)
sudo useradd --no-create-home --shell /bin/false node_exporter
wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
Сервис systemd /etc/systemd/system/node_exporter.service
:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
Node Exporter слушает на :9100
.
Настройка Prometheus
Редактируем /etc/prometheus/prometheus.yml
, добавляем job для опроса Node Exporter:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['server1.example.com:9100', 'server2.example.com:9100']
Перезапускаем сервис:
sudo systemctl restart prometheus
Теперь на веб-интерфейсе Prometheus можно выполнять запросы PromQL, например:
node_cpu_seconds_total
node_memory_MemAvailable_bytes
Установка Grafana
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana-*.deb
sudo dpkg -i grafana-*.deb
sudo systemctl enable --now grafana-server
По умолчанию Grafana доступна на http://<host>:3000
(логин/пароль admin/admin).
Подключение Prometheus к Grafana
- В Grafana зайдите в Connections → Data sources → Add data source.
- Выберите Prometheus, укажите
http://localhost:9090
. - Сохраните.
Создание дашборда
- Нажмите Create → Dashboard → Add a new panel.
- В поле запроса PromQL, например:
node_load1
Выберите тип графика (time series, gauge и др.).
Grafana предложит множество готовых дашбордов: в каталоге grafana.com/grafana/dashboards можно импортировать популярный «Node Exporter Full».
Настройка алертов (базово)
В Grafana 9+ есть Alerting:
- В панели дашборда нажмите Alert → Create alert rule.
- Укажите условие, например:
avg(node_cpu_seconds_total{mode="idle"}) < 0.1
. - Настройте канал доставки (Email, Slack, Telegram через webhook).
Для сложных сценариев можно использовать отдельный компонент Alertmanager от Prometheus.
Практические советы
- Держите отдельный сервер/VM для Prometheus и Grafana, чтобы мониторинг не зависел от наблюдаемых узлов.
- Делайте резервные копии директории
/var/lib/prometheus
— это хранилище метрик. - При росте инфраструктуры используйте сервис-дискавери (Consul, Kubernetes) вместо
static_configs
. - Ограничивайте доступ к интерфейсам Prometheus и Grafana через firewall или reverse proxy.
Кратко об отличиях Prometheus + Grafana и Zabbix + Grafana
Zabbix – это классическая комплексная система мониторинга «всё в одном»: она сама собирает метрики (обычно по push-модели через свои агенты), хранит их, умеет строить графики и отправлять алерты. Grafana в таком случае используется лишь как дополнительный инструмент визуализации поверх базы Zabbix.
Prometheus же изначально строился как высокопроизводительное хранилище временных рядов с pull-моделью: он сам опрашивает экспортеры, хранит данные и использует язык запросов PromQL. Grafana для него — основной инструмент визуализации и алертинга.
Если коротко:
- Prometheus+Grafana — современный, модульный стек, удобен для динамических сред (Kubernetes, микросервисы), простая интеграция с контейнерами.
- Zabbix+Grafana — «традиционный» вариант: единая платформа, богата встроенными средствами алертинга, лучше подходит для классического железного парка и корпоративных сетей.
Вывод
Связка Prometheus + Grafana позволяет быстро развернуть полноценную систему мониторинга:
Prometheus собирает метрики по pull-модели, Node Exporter отдаёт показатели серверов, а Grafana строит удобные дашборды и умеет присылать оповещения. Даже базовый пример с несколькими серверами даёт прозрачную картину состояния инфраструктуры и позволяет реагировать на проблемы до того, как они скажутся на пользователях.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний