2026-09-16
Графана дашборд

Мониторинг через Prometheus + Grafana на Ubuntu: полная настройка

Zabbix — классика, но для многих задач проще Prometheus: сбор метрик через pull-модель, удобный DSL-запрос (PromQL) и красивые дашборды в Grafana. Разберём полноценный стек: Prometheus + node_exporter + Grafana, с алертами в Telegram.


Архитектура

[Интернет-сервер: node_exporter :9100]
[Веб-сервер:    node_exporter :9100]   --scrape-->  [Prometheus :9090]
[Mikrotik:      SNMP - mikrotik_exporter]            |
[PostgreSQL:    postgres_exporter]                   v
                                              [Grafana :3000]
  • Prometheus — база метрик (pull-модель), хранит ряды и выполняет PromQL
  • node_exporter — системные метрики Linux (CPU, RAM, disk, net)
  • Grafana — визуализация, дашборды, алерты

Шаг 1. Установка Prometheus

Скачаем последний релиз. Замените версию на актуальную:

VERSION=2.53.1
wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/prometheus-${VERSION}.linux-amd64.tar.gz
tar xzf prometheus-${VERSION}.linux-amd64.tar.gz
sudo mv prometheus-${VERSION}.linux-amd64 /opt/prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /opt/prometheus

systemd-юнит

/etc/systemd/system/prometheus.service:

[Unit]
Description=Prometheus
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus 
  --config.file=/opt/prometheus/prometheus.yml 
  --storage.tsdb.path=/var/lib/prometheus
Restart=always

[Install]
WantedBy=multi-user.target
sudo mkdir -p /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

Шаг 2. Конфигурация Prometheus

/opt/prometheus/prometheus.yml:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    static_configs:
      - targets: ['192.168.10.101:9100', '192.168.10.102:9100']

Перезагрузка конфигурации без рестарта:

sudo systemctl reload prometheus
# Или через API
curl -X POST http://localhost:9090/-/reload

Проверка целей:

http://<server>:9090/targets

Шаг 3. node_exporter на целевых серверах

На каждом сервере (при необходимости — через Ansible из предыдущей статьи):

VERSION=1.8.2
wget https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz
tar xzf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter

systemd-юнит /etc/systemd/system/node_exporter.service:

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

Проверка метрик:

curl http://localhost:9100/metrics | head -50

Шаг 4. Графана

Установка

sudo apt install -y apt-transport-https software-properties-common wget
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

Логин по умолчанию: admin / admin (при входе попросит сменить пароль).

Добавление источника данных Prometheus

  1. Grafana → Configuration → Data Sources → Add data source → Prometheus
  2. URL: http://localhost:9090
  3. Save & Test.

Зимпорт дашборда

Удобно взять готовый дашборд node_exporter (ID 1860 на grafana.com):

Dashboards → Import → ID: 1860 → Load

Выберите источник данных Prometheus и сохраните. Дашборд покажет CPU/RAM/disk/network.


Шаг 5. Алерты в Telegram

Grafana умеет отправлять алерты. Создаём contact point (уведомление):

  1. Каналы: add contact point → тип Telegram
  2. Bot Token и Chat ID (получить через @BotFather и @userinfobot)
  3. Дашборд → панель → Alert → создать правило

Либо упрощённо — Prometheus alertmanager. Для v2 — контакт Grafana.

Пример правила алерта (CPU > 90%)

В панели CPU: Edit → Alert:

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90

Уведомление придёт, когда CPU держится выше 90% 5 минут (оценивается по разниц).


Шаг 6. Добавляем больше экспортёров

postgres_exporter

VERSION=0.16.0
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v${VERSION}/postgres_exporter-${VERSION}.linux-amd64.tar.gz
tar xzf ... && sudo mv postgres_exporter /usr/local/bin/
DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/mydb?sslmode=disable" 
  /usr/local/bin/postgres_exporter --web.listen-address=:9187

mikrotik_exporter

Хорошо смотрится в связке с Mikrotik-статьями сайта (SNMP):

# контейнерный вариант удобен
docker run -d --name mikrotik-exporter 
  -e "TARGET=192.168.10.1" -e "SNMP_COMMUNITY=public" 
  -e "SNMP_VERSION=2c" 
  biobob/mikrotik-exporter:latest

Потом добавьте targets в Prometheus (:9434 — порт mikrotik_exporter).

Стандартный порт mikrotik_exporter: 9434. Метрики: интерфейсы, трафик, VPN-счётчики.


Проверка стека

  1. http://<server>:9090/graph — выполнить запрос:
    promql
    rate(node_cpu_seconds_total{instance="..."}[5m])
  2. http://<server>:3000 — Grafana, логин admin.
  3. Дашборд 1860 показывает графики.
  4. Тест алерта: временно нагрузите сервер (stress --cpu 4), убедитесь, что пришло Telegram-уведомление.

Тонкости и подводные камни

  • Хранение метрик — прометей хранит по умолчанию 15 дней на диске. Для недель-месяцев — long-term storage или Thanos. В маленькой сети 15 суток обычно хватает.
  • Pull-модель и NAT — Prometheus сам ходит на экспортёры. Если серверы за NAT — нужен прокси (PushProx) или пушер (Prometheus Pushgateway).
  • Безопасность: экспортёры лучше слушать на localhost или защищённой VPN-сети. На странице -web.listen-address экзотики — не забывайте firewall.
  • node_exporter не даёт историю — вы собираете с момента запуска. Для retro-данных не выйдет.
  • Grafana 24/7 память — стек не большой, но снова: на VDS с 512Mb всё бьётся в доступ. Ограничьте число series.
  • Telegram-контакт — для алертов в Grafana 10+ используйте «Соntact point» под категорией «Telegram». Bot должен иметь право писать в канал/группу.

Шпаргалка

# Prometheus
wget .../prometheus-2.53.1.linux-amd64.tar.gz
sudo mv ... /opt/prometheus; chown -R prometheus /opt/prometheus
systemctl enable --now prometheus

# node_exporter
sudo mv node_exporter /usr/local/bin/
systemctl enable --now node_exporter

# Grafana
sudo apt install -y grafana
systemctl enable --now grafana-server

# Дашборд: 1860, источник: http://localhost:9090

Проверено на: Ubuntu 22.04/24.04 + Grafana 10.
Дата: Сентябрь 2026.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *