Чому Prometheus і Grafana для моніторингу bare metal серверів?
Bare metal сервери пропонують неперевершену продуктивність, контроль та ізоляцію, що робить їх ідеальними для вимогливих робочих навантажень, таких як високотрафіковий веб-хостинг, великі бази даних, ігрові сервери, CI/CD конвеєри та потокові сервіси. Однак ефективне керування цими потужними машинами вимагає надійного моніторингу. Prometheus чудово збирає дані часових рядів, тоді як Grafana надає інтуїтивно зрозумілі інформаційні панелі для візуалізації цих даних. Разом вони утворюють потужну комбінацію для розуміння стану сервера, виявлення вузьких місць та проактивного вирішення проблем.
Цей посібник зосереджений на встановленні стеку моніторингу (Prometheus і Grafana) на виділеному сервері або потужному VPS, який потім буде моніторити інші bare metal сервери за допомогою Node Exporter. Це гарантує, що сама система моніторингу має виділені ресурси і не конкурує з сервісами, що працюють на моніторингових машинах.
Передумови та мінімальні вимоги до сервера
Перш ніж почати, переконайтеся, що у вас є:
- Виділений сервер або потужний VPS від Valebyte зі свіжою інсталяцією Ubuntu 22.04 LTS (або подібного дистрибутива на базі Debian). Для самого сервера моніторингу ми рекомендуємо щонайменше 4 vCPU, 8 ГБ RAM та 100 ГБ NVMe сховища для використання в продакшені, що дозволить зберігати дані та забезпечить швидкість роботи інформаційних панелей.
- Root або sudo доступ до сервера моніторингу.
- Root або sudo доступ до bare metal серверів, які ви бажаєте моніторити.
- Базове розуміння інтерфейсу командного рядка Linux.
- Відкриті порти у вашому брандмауері: 9090 для Prometheus, 3000 для Grafana та 9100 для Node Exporter (на моніторингових серверах).
Покроковий посібник зі встановлення
Крок 1: Оновлення системи та встановлення залежностей
Спочатку підключіться до свого сервера моніторингу через SSH та оновіть списки пакетів та встановлені пакети. Встановіть необхідні утиліти:
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Крок 2: Встановлення сервера Prometheus
Prometheus зазвичай не знаходиться у стандартних репозиторіях Ubuntu, тому ми завантажимо останню стабільну версію безпосередньо.
- Створіть користувача та каталоги Prometheus:
- Завантажте та розпакуйте Prometheus: Замініть
2.47.1на останню стабільну версію, якщо вона відрізняється. Перевірте Завантаження Prometheus. - Створіть файл конфігурації Prometheus (
/etc/prometheus/prometheus.yml): - Встановіть власника для конфігурації:
- Створіть файл служби systemd для Prometheus (
/etc/systemd/system/prometheus.service): - Перезавантажте systemd, запустіть та увімкніть Prometheus:
- Перевірте статус Prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
sudo cp prometheus-2.47.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.47.1.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.47.1.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.47.1.linux-amd64/console_libraries /etc/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
rm -rf prometheus-2.47.1.linux-amd64.tar.gz prometheus-2.47.1.linux-amd64
sudo nano /etc/prometheus/prometheus.yml
Вставте наступний вміст. Ця конфігурація включає базову ціль збору даних (scrape target) для самого Prometheus та заповнювач для цілей Node Exporter.
global:
scrape_interval: 15s # How frequently to scrape targets
evaluation_interval: 15s # How frequently to evaluate rules
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Add your bare metal servers here after installing Node Exporter
# - job_name: 'node_exporter'
# static_configs:
# - targets: ['your_server_ip_1:9100', 'your_server_ip_2:9100']
Збережіть та вийдіть (Ctrl+X, Y, Enter).
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
sudo nano /etc/systemd/system/prometheus.service
Вставте наступне:
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/consoles \
--web.enable-lifecycle
[Install]
WantedBy=multi-user.target
Збережіть та вийдіть.
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Ви повинні побачити active (running). Доступ до інтерфейсу Prometheus у вашому браузері за адресою http://YOUR_MONITORING_SERVER_IP:9090.
Крок 3: Встановлення Node Exporter на моніторингові bare metal сервери
Node Exporter — це агент, який збирає системні метрики (CPU, RAM, дисковий ввід/вивід, мережа) та надає їх для збору Prometheus. Встановіть його на кожен bare metal сервер, який ви хочете моніторити.
- Створіть користувача та каталоги Node Exporter:
- Завантажте та розпакуйте Node Exporter: Замініть
1.6.1на останню стабільну версію, якщо вона відрізняється. Перевірте Завантаження Node Exporter. - Створіть файл служби systemd для Node Exporter (
/etc/systemd/system/node_exporter.service): - Перезавантажте systemd, запустіть та увімкніть Node Exporter:
- Перевірте статус Node Exporter:
sudo useradd --no-create-home --shell /bin/false node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
rm -rf node_exporter-1.6.1.linux-amd64.tar.gz node_exporter-1.6.1.linux-amd64
sudo nano /etc/systemd/system/node_exporter.service
Вставте наступне:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Збережіть та вийдіть.
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporter
Ви повинні побачити active (running). Доступ до метрик Node Exporter у вашому браузері за адресою http://YOUR_MONITORED_SERVER_IP:9100/metrics.
Крок 4: Налаштування Prometheus для збору даних з цілей Node Exporter
Тепер поверніться до свого сервера моніторингу. Відредагуйте конфігурацію Prometheus, щоб додати ваші bare metal сервери.
- Відредагуйте конфігурацію Prometheus:
- Додайте нові записи
job_nameдля ваших bare metal серверів: Замінітьyour_server_ip_1,your_server_ip_2на фактичні IP-адреси ваших моніторингових серверів. - Перевірте конфігурацію Prometheus на наявність синтаксичних помилок:
- Перезавантажте Prometheus, щоб застосувати зміни:
- Перевірте цілі в інтерфейсі Prometheus: Перейдіть до
http://YOUR_MONITORING_SERVER_IP:9090/targets. Ви повинні побачити ваші цілі Node Exporter, перелічені зі статусом 'UP'.
sudo nano /etc/prometheus/prometheus.yml
# ... existing configuration ...
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100', 'your_next_server_ip:9100']
# Optionally, add labels for better organization
# labels:
# environment: production
# location: datacenter_a
Збережіть та вийдіть.
/usr/local/bin/promtool check config /etc/prometheus/prometheus.yml
Він повинен вивести SUCCESS!. Якщо ні, виправте всі повідомлені помилки.
sudo systemctl reload prometheus
Крок 5: Встановлення Grafana
Grafana надає рівень візуалізації для ваших даних Prometheus.
- Додайте ключ GPG Grafana:
- Додайте репозиторій Grafana:
- Оновіть кеш apt та встановіть Grafana:
- Запустіть та увімкніть службу Grafana:
- Перевірте статус Grafana:
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] 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 daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server
Ви повинні побачити active (running). Доступ до інтерфейсу Grafana у вашому браузері за адресою http://YOUR_MONITORING_SERVER_IP:3000. Логін за замовчуванням admin / admin. Вам буде запропоновано змінити пароль при першому вході.
Крок 6: Налаштування джерела даних та інформаційної панелі Grafana
Тепер підключіть Grafana до Prometheus та імпортуйте корисну інформаційну панель.
- Додайте Prometheus як джерело даних:
- Увійдіть до Grafana (
admin/admin). - Натисніть піктограму шестерні (Configuration) на лівій бічній панелі, потім 'Data sources'.
- Натисніть 'Add data source'.
- Виберіть 'Prometheus'.
- Для 'Name' введіть
Prometheus. - Для 'URL' введіть
http://localhost:9090. - Прокрутіть вниз і натисніть 'Save & test'. Ви повинні побачити 'Data source is working'.
- Увійдіть до Grafana (
- Імпортуйте інформаційну панель Node Exporter:
- Натисніть піктограму '+' (Create) на лівій бічній панелі, потім 'Import'.
- У полі 'Import via grafana.com' введіть
1860(популярний ID інформаційної панелі Node Exporter Full). - Натисніть 'Load'.
- На наступному екрані виберіть своє джерело даних 'Prometheus' зі спадного списку.
- Натисніть 'Import'.
Тепер ви повинні побачити комплексну інформаційну панель, що візуалізує метрики з усіх ваших моніторингових bare metal серверів.
Варіанти використання моніторингу bare metal серверів
За допомогою Prometheus та Grafana ви можете моніторити широкий спектр робочих навантажень bare metal:
- Веб-хостинг: Відстежуйте запити Nginx/Apache на секунду, час відгуку, одночасні з'єднання та використання ресурсів для забезпечення оптимальної продуктивності веб-сайту.
- Бази даних (наприклад, PostgreSQL, MySQL): Моніторте затримку запитів, активні з'єднання, коефіцієнти попадання в буфер, дисковий ввід/вивід та статус реплікації для підтримки здоров'я бази даних.
- Ігрові сервери: Слідкуйте за завантаженням CPU, затримкою мережі, кількістю гравців та використанням пам'яті, щоб забезпечити плавний ігровий досвід.
- Потокові сервіси: Спостерігайте за використанням пропускної здатності, одночасними потоками та завантаженням сервера для забезпечення безперебійної доставки контенту.
- CI/CD конвеєри: Моніторте ресурси агентів збірки, дисковий простір та мережеву активність під час процесів безперервної інтеграції та розгортання.
- Самостійно розміщені програми: Відстежуйте споживання ресурсів власних програм, поштових серверів (наприклад, Postfix, Dovecot) або VPN-сервісів (наприклад, OpenVPN, WireGuard) для забезпечення їх стабільності.
Вирішення поширених проблем
- Prometheus/Grafana/Node Exporter не запускається: Перевірте
sudo systemctl status <service_name>таsudo journalctl -xeu <service_name>на наявність повідомлень про помилки. - Prometheus не збирає дані з цілей: Перевірте IP-адреси цілей та номери портів у
prometheus.yml. Переконайтеся, що брандмауери (наприклад, UFW) як на сервері моніторингу, так і на моніторингових серверах дозволяють трафік на порти 9090 (Prometheus), 3000 (Grafana) та 9100 (Node Exporter). Перевіртеhttp://YOUR_MONITORING_SERVER_IP:9090/targetsв інтерфейсі Prometheus на наявність помилок збору даних. - Grafana не відображає дані: Переконайтеся, що джерело даних Prometheus налаштовано правильно, і 'Save & test' показує успіх. Переконайтеся, що імпортована вами інформаційна панель сумісна з метриками Node Exporter.
- Проблеми з дозволами: Двічі перевірте власність файлів та каталогів (
chown) та дозволи (chmod) для бінарних файлів Prometheus та Node Exporter та файлів конфігурації.
Правильна серверна інфраструктура має вирішальне значення для ефективного моніторингу. Нижче наведено загальні рекомендації щодо апаратного забезпечення для вашого сервера моніторингу, засновані на масштабі вашого bare metal середовища.
| Кількість моніторингових серверів (з Node Exporter) | vCPU / Ядра | RAM | Диск (Тип + ГБ) | Місячна пропускна здатність |
|---|---|---|---|---|
| До 10 серверів | 4 vCPU | 8 ГБ | 100 ГБ NVMe | 1 ТБ |
| 10 - 50 серверів | 8 ядер | 16-32 ГБ | 250 ГБ NVMe | 2 ТБ |
| 50 - 150 серверів | 12-16 ядер | 32-64 ГБ | 500 ГБ NVMe (або більший HDD для довгострокового зберігання) | 5 ТБ |
| 150+ серверів (з високою кардинальністю метрик) | 16-24 ядер | 64-128 ГБ | 1 ТБ+ NVMe (або кластерне рішення для зберігання) | 10 ТБ+ |