Чому Prometheus і Grafana для моніторингу Bare Metal?
Моніторинг є критично важливим компонентом для підтримки здорової та продуктивної серверної інфраструктури. Для середовищ bare metal, де ви маєте повний контроль і відповідальність, надійне рішення для моніторингу, таке як Prometheus і Grafana, є незамінним. Prometheus чудово збирає та зберігає дані часових рядів, тоді як Grafana надає потужні можливості візуалізації, перетворюючи необроблені метрики на дієві дашборди. Разом вони пропонують повний огляд використання ЦП вашого сервера, споживання пам'яті, дискового вводу/виводу, мережевого трафіку та метрик, специфічних для додатків.
Незалежно від того, чи розміщуєте ви веб-додаток з високим трафіком, вимогливий ігровий сервер, складний кластер баз даних або конвеєр CI/CD, розуміння характеристик продуктивності вашого сервера є ключем до проактивного обслуговування, усунення несправностей та масштабування. Цей посібник зосереджений на налаштуванні цього стеку на виділеному сервері від Valebyte, забезпечуючи ізоляцію та необроблену потужність, необхідну для серйозного моніторингу.
Передумови
- Виділений сервер або потужний VPS (для самого стеку моніторингу) під керуванням Ubuntu 22.04 LTS.
- Root або sudo доступ до сервера.
- Базове знайомство з командним рядком Linux.
- Непривілейований користувач для запуску служб Prometheus і Grafana.
- Фаєрвол, налаштований для дозволу доступу до Prometheus (порт 9090), Grafana (порт 3000) та Node Exporter (порт 9100).
Мінімальні вимоги до сервера для стеку моніторингу
Для невеликого або середнього налаштування моніторингу (моніторинг 5-10 серверів) сам сервер моніторингу повинен мати:
- vCPU: 2 ядра (або 2 vCPU)
- RAM: 4 ГБ
- Диск: 50 ГБ NVMe (для даних часових рядів Prometheus)
- Пропускна здатність: 100 Мбіт/с (для збору метрик та доступу до дашбордів)
Для більших розгортань розгляньте вищі специфікації, як детально описано в таблиці масштабування нижче.
Покроковий посібник: Налаштування Prometheus і Grafana
Крок 1: Підготуйте свій сервер
Спочатку оновіть системні пакети та встановіть необхідні утиліти:
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Створіть виділених системних користувачів для Prometheus і Grafana. Це підвищує безпеку, запускаючи служби з мінімальними привілеями.
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false grafana
Крок 2: Встановіть сервер Prometheus
Завантажте останню стабільну версію Prometheus. Перевірте сторінку завантаження Prometheus для найновішої версії. На момент написання цієї статті актуальною є версія 2.47.0.
PROMETHEUS_VERSION="2.47.0"
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
tar xvfz prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
cd prometheus-${PROMETHEUS_VERSION}.linux-amd64
Створіть необхідні каталоги та скопіюйте бінарні файли та файли конфігурації:
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp consoles/ console_libraries/ /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/prometheus.yml
Встановіть права власності для безпеки:
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
Крок 3: Налаштуйте Prometheus
Відредагуйте файл конфігурації Prometheus, щоб визначити цілі збору метрик. Для базового налаштування ми будемо моніторити сам сервер Prometheus за допомогою Node Exporter (який ми встановимо пізніше).
sudo nano /etc/prometheus/prometheus.yml
Замініть існуючий розділ scrape_configs на наступний або додайте нове завдання для локального 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']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # Target for the local Node Exporter
Збережіть та вийдіть (Ctrl+X, Y, Enter).
Крок 4: Створіть службу Prometheus Systemd
Створіть файл служби systemd для керування Prometheus:
sudo nano /etc/systemd/system/prometheus.service
Додайте наступний вміст:
[Unit]
Description=Prometheus
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/console_libraries \
--web.listen-address=":9090"
Restart=always
[Install]
WantedBy=multi-user.target
Перезавантажте systemd, запустіть Prometheus та увімкніть його для запуску під час завантаження:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Перевірте, чи працює Prometheus, перейшовши за адресою http://YOUR_SERVER_IP:9090/ у вашому браузері. Ви повинні побачити інтерфейс Prometheus.
Крок 5: Встановіть Node Exporter на сервери, що моніторяться (і на сервер Prometheus)
Node Exporter збирає метрики на рівні хоста (ЦП, пам'ять, диск, мережа) та надає їх Prometheus. Встановіть його на будь-який сервер, який ви бажаєте моніторити, включаючи сам сервер Prometheus.
Завантажте останню стабільну версію Node Exporter (наприклад, 1.6.1):
NODE_EXPORTER_VERSION="1.6.1"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
tar xvfz node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
cd node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64
Скопіюйте бінарний файл та встановіть права власності:
sudo cp node_exporter /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
Створіть службу systemd для Node Exporter:
sudo nano /etc/systemd/system/node_exporter.service
Додайте наступний вміст:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=":9100"
Restart=always
[Install]
WantedBy=multi-user.target
Перезавантажте systemd, запустіть Node Exporter та увімкніть його:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporter
Перевірте, чи працює Node Exporter, перейшовши за адресою http://YOUR_SERVER_IP:9100/metrics у вашому браузері. Ви повинні побачити сторінку з необробленими метриками.
Важливо: Якщо ви встановлюєте Node Exporter на інші сервери, не забудьте відкрити порт 9100 у їхніх фаєрволах та додати їхні IP-адреси до файлу /etc/prometheus/prometheus.yml на вашому сервері Prometheus:
- job_name: 'remote_servers'
static_configs:
- targets: ['REMOTE_SERVER_IP_1:9100', 'REMOTE_SERVER_IP_2:9100']
Після зміни prometheus.yml перезапустіть Prometheus: sudo systemctl restart prometheus.
Крок 6: Встановіть Grafana
Додайте GPG ключ та репозиторій Grafana до вашої системи:
sudo wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
Оновіть пакети та встановіть Grafana:
sudo apt update
sudo apt install -y grafana
Запустіть Grafana та увімкніть її для запуску під час завантаження:
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server
Перевірте, чи працює Grafana, перейшовши за адресою http://YOUR_SERVER_IP:3000/ у вашому браузері. Логін за замовчуванням – admin / admin. Вам буде запропоновано змінити пароль при першому вході.
Крок 7: Налаштуйте Grafana з джерелом даних Prometheus і дашбордом
Увійдіть до Grafana (admin/admin).
Додайте Prometheus як джерело даних:
- Натисніть піктограму шестерні (Конфігурація) на лівій бічній панелі, потім 'Джерела даних'.
- Натисніть 'Додати джерело даних'.
- Виберіть 'Prometheus'.
- Для 'Ім'я' введіть
Prometheus. - Для 'URL' введіть
http://localhost:9090. - Прокрутіть вниз і натисніть 'Зберегти та перевірити'. Ви повинні побачити 'Джерело даних працює'.
Імпортуйте дашборд Node Exporter:
- Натисніть піктограму '+' (Створити) на лівій бічній панелі, потім 'Імпорт'.
- У полі 'Імпорт через grafana.com' введіть
1860(популярний ID дашборда Node Exporter Full). - Натисніть 'Завантажити'.
- На наступному екрані виберіть ваше джерело даних 'Prometheus' зі спадного списку.
- Натисніть 'Імпорт'.
Тепер ви повинні побачити комплексний дашборд, що відображає метрики з ваших екземплярів Node Exporter. Ви можете перемикатися між різними цілями Node Exporter, якщо у вас налаштовано кілька.
Вирішення поширених проблем
- Служба не запускається: Перевірте логи systemd за допомогою
sudo journalctl -u prometheus.serviceабоsudo journalctl -u grafana-server.serviceна наявність помилок. - Prometheus не збирає метрики з цілей: Перевірте IP-адреси та порти цілей у
/etc/prometheus/prometheus.yml. Перевірте сторінку Prometheus 'Status -> Targets' в інтерфейсі користувача на наявність помилок збору метрик. Переконайтеся, що фаєрволи відкриті як на сервері Prometheus (порти 9090, 9100), так і на серверах, що моніторяться (порт 9100). - Grafana не підключається до Prometheus: Перевірте URL-адресу джерела даних Prometheus у Grafana. Переконайтеся, що Prometheus працює та доступний із сервера Grafana.
- Відсутні метрики в Grafana: Переконайтеся, що Node Exporter працює на цільовому сервері, а Prometheus успішно збирає з нього метрики. Перевірте сторінку Prometheus 'Graph', щоб побачити, чи збираються метрики (наприклад,
node_cpu_seconds_total). - Проблеми з дозволами: Переконайтеся, що користувачі
prometheusтаgrafanaволодіють своїми відповідними каталогами та бінарними файлами.
Вибір правильного сервера для вашого стеку моніторингу, особливо при керуванні численними або критично важливими службами, є першочерговим. Наведена нижче таблиця надає рекомендації щодо специфікацій сервера на основі масштабу вашої інфраструктури, що моніториться.
| Масштаб навантаження (Сервери, що моніторяться) | vCPU (для навантаження, що моніториться) | RAM (для навантаження, що моніториться) | Диск (Тип + ГБ) | Місячна пропускна здатність (для навантаження, що моніториться) |
|---|---|---|---|---|
| Малий (1-5 серверів, особисті проекти, легкий веб-хостинг) | 4-8 vCPU | 8-16 ГБ | 240 ГБ NVMe | 100 Мбіт/с |
| Середній (5-15 серверів, кілька мікросервісів, помірні бази даних, ігрові сервери) | 8-16 ядер | 32-64 ГБ | 480 ГБ NVMe (RAID1) | 1 Гбіт/с |
| Великий (15+ серверів, API з високим трафіком, великі кластери БД, CI/CD, стрімінг) | 16-32+ ядер | 64-128+ ГБ | 1 ТБ+ NVMe (RAID10) | 10 Гбіт/с |
Подальша кастомізація та розширений моніторинг
Після того, як ваше базове налаштування запрацює, ви можете розширити свої можливості моніторингу:
- Alertmanager: Інтегруйте Alertmanager з Prometheus для надсилання сповіщень (електронна пошта, Slack, PagerDuty), коли перевищуються критичні порогові значення.
- Експортери для конкретних додатків: Встановіть інші експортери Prometheus для баз даних (наприклад,
mysqld_exporter,postgres_exporter), веб-серверів (наприклад,apache_exporter,nginx_exporter) або черг повідомлень. - Користувацькі дашборди: Створюйте власні дашборди Grafana, адаптовані до ваших конкретних метрик додатків та бізнес-потреб.
- Правила запису (Recording Rules): Використовуйте правила запису Prometheus для попередньої агрегації часто запитуваних даних, покращуючи час завантаження дашбордів.
- Віддалене сховище (Remote Storage): Для довгострокового зберігання або високої доступності розгляньте можливість інтеграції Prometheus з рішеннями для віддаленого сховища.