Хочете бачити реальну картину завантаження CPU, використання пам’яті та дисків на вашому сервері Linux — у красивих дашбордах і з розумними алертами? Давайте швидко піднімемо стек Prometheus + node_exporter + Grafana, імпортуємо готові панелі та ввімкнемо оповіщення про проблеми. Усе — з акцентом на практику, через термінал Linux, але з дружнім поясненням і невеликим GUI-блоком у Grafana.
Що ми побудуємо і навіщо
Ми розгорнемо Prometheus як збирач метрик, node_exporter як агент на хості, і Grafana для візуалізації та алертів. Це класичний стек для задач на кшталт «Linux моніторинг» на продакшн і домашніх інфраструктурах. Результат — зрозумілі графіки та алерти по CPU, пам’яті і диску з мінімальною затримкою.
Передумови
- Свіжий сервер Linux (Ubuntu/Debian) з правами sudo.
- Доступ по SSH і базовий комфорт у термінал Linux.
- Відкриті порти (локально або у фаєрволі): 9090 (Prometheus), 9100 (node_exporter), 3000 (Grafana).
Встановлення Prometheus і node_exporter (APT)
Найпростіше почати з пакетів дистрибутива. Для Ubuntu/Debian:
sudo apt update
sudo apt install -y prometheus prometheus-node-exporter
Пакет prometheus-node-exporter автоматично запустить агент на порту 9100. Залишилось навчити Prometheus збирати ці метрики.
Налаштування Prometheus
Оновимо /etc/prometheus/prometheus.yml та підключимо файл правил алертів:
sudo tee /etc/prometheus/prometheus.yml >/dev/null <<'YAML'
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "/etc/prometheus/alerts.yml"
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
YAML
# Файл з алертами
sudo tee /etc/prometheus/alerts.yml >/dev/null <<'YAML'
# CPU > 80% протягом 5 хв
- alert: HighCPU
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Високе навантаження CPU"
description: "CPU > 80% на {{ $labels.instance }} протягом 5 хв"
# Використання пам'яті > 85%
- alert: HighMemory
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "Високе використання пам'яті"
description: "Пам'ять > 85% на {{ $labels.instance }}"
# Диск > 85% (ігноруємо тимчасові ФС)
- alert: LowDiskSpace
expr: 100 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay|squashfs"}) * 100 > 85
for: 10m
labels:
severity: critical
annotations:
summary: "Мало місця на диску"
description: "Заповнення диску > 85% на {{ $labels.instance }}"
YAML
Запуск і автозапуск
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus prometheus-node-exporter
# Відкрити порти (якщо використовується UFW)
sudo ufw allow 9090/tcp
sudo ufw allow 9100/tcp
Перевірка: відкрийте в браузері http://<IP>:9090/targets — статус має бути UP.
GUI-спосіб: встановлення Grafana та підключення Prometheus
Grafana — це зручний графічний інтерфейс для створення дашбордів і алертів. Встановимо з офіційного репозиторію:
# Додати репозиторій Grafana (Ubuntu/Debian)
sudo apt install -y software-properties-common curl
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://apt.grafana.com/gpg.key | sudo tee /etc/apt/keyrings/grafana.gpg >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] 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
sudo ufw allow 3000/tcp
Далі у веб-інтерфейсі http://<IP>:3000 (логін/пароль: admin/admin):
- Configuration → Data sources → Add data source → Prometheus → URL:
http://localhost:9090→ Save & Test. - Dashboards → Import → вкажіть ID «1860» (Node Exporter Full) → Import.
- Перейдіть на дашборд і насолоджуйтесь метриками в реальному часі 😊
Алерти: Prometheus rules та (за бажанням) Grafana
Ми вже додали правила у /etc/prometheus/alerts.yml. Щоб активувати зміни:
sudo systemctl reload prometheus
Для відправки повідомлень за межі Prometheus додайте Alertmanager. Мінімально — налаштуйте /etc/alertmanager/alertmanager.yml (email, Slack, Telegram), а в Prometheus додайте alerting → alertmanagers. Якщо простіше — скористайтеся вбудованими Grafana Alerting (Alert rules на панелях), прив’яжіть Notification policies до Telegram/Webhook. Це зручно, якщо вже працює Grafana і вам комфортний її інтерфейс.
Альтернативні способи
Через Docker Compose
Хочете контейнеризацію? Ось швидкий старт. Зверніть увагу на volume’и для збереження даних.
mkdir -p ~/mon/{prometheus,grafana}
cat > ~/mon/prometheus/prometheus.yml <<'YAML'
global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
YAML
cat > docker-compose.yml <<'YAML'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus:/etc/prometheus
- prom-data:/prometheus
command: ["--config.file=/etc/prometheus/prometheus.yml","--storage.tsdb.retention.time=15d"]
ports: ["9090:9090"]
node-exporter:
image: quay.io/prometheus/node-exporter:latest
pid: host
network_mode: host
command: ["--path.rootfs=/host"]
volumes:
- /:/host:ro,rslave
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
volumes:
- grafana-data:/var/lib/grafana
volumes:
prom-data:
grafana-data:
YAML
docker compose up -d
Після старту — додайте Prometheus як джерело в Grafana, імпортуйте дашборд 1860.
Багато хостів
На кожному хості встановіть node_exporter і додайте його адресу в prometheus.yml. Наприклад:
# Додайте до static_configs
- targets: ["10.0.0.11:9100", "10.0.0.12:9100", "10.0.0.13:9100"]
Автоматизація: cron та systemd timers
Для автоперевірки правил або бекапів корисні cron та systemd timers. Наприклад, щодня вночі перевіряти синтаксис алертів:
# Додайте рядок у crontab
crontab -e
# о 03:00 щодня
0 3 * * * /usr/bin/promtool check rules /etc/prometheus/alerts.yml || logger "Prometheus alerts lint failed"
FAQ
- Grafana не бачить Prometheus: перевірте URL, порт 9090, фаєрвол (UFW/iptables), чи відповідає
/-/healthy. У Grafana Data source натисніть «Save & Test». - node_exporter DOWN: переконайтесь, що сервіс працює:
systemctl status prometheus-node-exporter, порт 9100 відкритий, SELinux/AppArmor не блокують. - Метрика пам’яті виглядає дивно: використовуйте
node_memory_MemAvailable_bytes(враховує кеш/буфери), а не «total-used» лінійку. - Як зменшити місце, що займає Prometheus? Додайте прапор
--storage.tsdb.retention.time=15dу сервіс і перезапустіть Prometheus. - Час на графіках «пливе»: синхронізуйте час через
systemd-timesyncd/NTP на всіх вузлах. - Де взяти нотифікації? Використайте Alertmanager (email/Slack/Telegram) або Grafana Alerting з Notification policies.
Порада від Kernelka
Перед тим, як довірити все дашбордам, порівняйте показники з базовими інструментами htop/top. Це допомагає «відчувати» систему і швидше ловити аномалії. Також тримайте окремий дашборд лише з критичними метриками — CPU, RAM, диски, мережа — і не перевантажуйте його зайвим. Менше шуму = швидше реагування 🚀
Підсумок
- Поставили Prometheus і node_exporter, підняли збір метрик CPU/пам’яті/дисків.
- Налаштували Grafana, підключили Prometheus і імпортували дашборд 1860.
- Увімкнули алерти на високий CPU, пам’ять і заповнення диску.
- Розглянули альтернативу через Docker Compose.
- Додали автоматизацію через cron та systemd timers.
Готово! Ваш сервер Linux тепер під наглядом — чітко, наочно й з попередженнями до того, як щось піде не так.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.