Как настроить мониторинг серверов с помощью Prometheus и Grafana (базовый пример)

10 минут чтения
Средний рейтинг статьи — 4.8

В продакшене важно не только настроить балансировку и отказоустойчивость, но и вовремя узнавать о проблемах.
Мониторинг даёт:

  • контроль загрузки 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

  1. В Grafana зайдите в Connections → Data sources → Add data source.
  2. Выберите Prometheus, укажите http://localhost:9090.
  3. Сохраните.

Создание дашборда

  • Нажмите Create → Dashboard → Add a new panel.
  • В поле запроса PromQL, например:
node_load1

Выберите тип графика (time series, gauge и др.).

Grafana предложит множество готовых дашбордов: в каталоге grafana.com/grafana/dashboards можно импортировать популярный «Node Exporter Full».

Настройка алертов (базово)

В Grafana 9+ есть Alerting:

  1. В панели дашборда нажмите Alert → Create alert rule.
  2. Укажите условие, например: avg(node_cpu_seconds_total{mode="idle"}) < 0.1.
  3. Настройте канал доставки (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 строит удобные дашборды и умеет присылать оповещения. Даже базовый пример с несколькими серверами даёт прозрачную картину состояния инфраструктуры и позволяет реагировать на проблемы до того, как они скажутся на пользователях.

10 минут чтения
Средний рейтинг статьи — 4.8

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний