Мониторинг через 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
- Grafana → Configuration → Data Sources → Add data source → Prometheus
- URL:
http://localhost:9090 - Save & Test.
Зимпорт дашборда
Удобно взять готовый дашборд node_exporter (ID 1860 на grafana.com):
Dashboards → Import → ID: 1860 → Load
Выберите источник данных Prometheus и сохраните. Дашборд покажет CPU/RAM/disk/network.
Шаг 5. Алерты в Telegram
Grafana умеет отправлять алерты. Создаём contact point (уведомление):
- Каналы: add contact point → тип Telegram
- Bot Token и Chat ID (получить через
@BotFatherи@userinfobot) - Дашборд → панель → 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-счётчики.
Проверка стека
http://<server>:9090/graph— выполнить запрос:
promql
rate(node_cpu_seconds_total{instance="..."}[5m])http://<server>:3000— Grafana, логин admin.- Дашборд 1860 показывает графики.
- Тест алерта: временно нагрузите сервер (
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.