Чому Prometheus і Grafana для моніторингу серверів?
Prometheus і Grafana утворюють потужний, відкритий стек для моніторингу серверів та застосунків. Prometheus чудово збирає та зберігає дані часових рядів, пропонуючи гнучку мову запитів (PromQL) для аналізу та сповіщень. Grafana, з іншого боку, надає багатофункціональні, настроювані інформаційні панелі для візуалізації цих даних, роблячи складні метрики легкозрозумілими. Разом вони пропонують комплексне рішення для відстеження стану сервера, використання ресурсів та метрик, специфічних для застосунків, що є важливим для підтримки стабільних та продуктивних сервісів, таких як ігрові сервери, веб-хостинг, бази даних або CI/CD конвеєри.
Передумови
Перш ніж почати, переконайтеся, що у вас є наступне:
- Два сервери: Один виділений сервер або надійний VPS для стеку Prometheus/Grafana ('сервер моніторингу') та щонайменше один сервер для моніторингу ('сервер, що моніториться').
- Операційна система: Ubuntu 22.04 LTS або подібний дистрибутив на базі Debian на обох серверах.
- Доступ по SSH: Користувач root або користувач з
sudoпривілеями на обох серверах. - Брандмауер: UFW увімкнено та налаштовано для дозволу трафіку SSH (порт 22), Prometheus (порт 9090), Grafana (порт 3000) та Node Exporter (порт 9100).
Мінімальні вимоги до сервера для стеку моніторингу (Сервер моніторингу)
Для сервера, що розміщує Prometheus і Grafana, розгляньте ці базові специфікації:
- vCPU: 2 ядра
- RAM: 4ГБ
- Диск: 50ГБ NVMe (для продуктивності та зберігання даних)
- Пропускна здатність: 1ТБ/місяць
Ці специфікації підходять для моніторингу до 10-15 кінцевих точок зі звичайними обсягами метрик. Більші розгортання вимагатимуть більше ресурсів.
Покрокова інсталяція та конфігурація
Крок 1: Оновлення системи та встановлення залежностей (Сервер моніторингу)
Почніть з оновлення списку пакетів вашого сервера моніторингу та встановлення необхідних утиліт.
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Крок 2: Встановлення сервера Prometheus (Сервер моніторингу)
Prometheus зазвичай не входить до стандартних репозиторіїв, тому ми завантажимо його бінарний файл безпосередньо.
Завантаження та розпакування Prometheus
PROMETHEUS_VERSION="2.48.0" # Перевірте наявність останньої стабільної версії на prometheus.io
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
sudo mv prometheus-${PROMETHEUS_VERSION}.linux-amd64 /usr/local/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
Налаштування Prometheus
Створіть базовий файл конфігурації Prometheus за адресою /etc/prometheus/prometheus.yml:
sudo nano /etc/prometheus/prometheus.yml
Додайте наступний вміст:
global:
scrape_interval: 15s # Як часто збирати цілі.
evaluation_interval: 15s # Як часто оцінювати правила.
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus збирає дані з самого себе
Встановлення дозволів та створення служби Systemd
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /usr/local/prometheus/prometheus
sudo chown prometheus:prometheus /usr/local/prometheus/promtool
sudo cp /usr/local/prometheus/consoles /usr/local/prometheus/console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
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/prometheus/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.external-url=http://<YOUR_MONITORING_SERVER_IP>:9090
[Install]
WantedBy=multi-user.target
Замініть <YOUR_MONITORING_SERVER_IP> на публічну IP-адресу або доменне ім'я вашого сервера.
Запуск Prometheus та увімкнення брандмауера
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo ufw allow 9090/tcp
Перевірте, чи працює Prometheus, перейшовши за адресою http://<YOUR_MONITORING_SERVER_IP>:9090 у вашому веб-браузері. Ви повинні побачити інтерфейс Prometheus.
Крок 3: Встановлення Node Exporter (Сервер, що моніториться)
Node Exporter працює на кожному сервері, який ви хочете моніторити, надаючи системні метрики для збору Prometheus.
Завантаження та розпакування Node Exporter
На вашому *сервері, що моніториться*:
NODE_EXPORTER_VERSION="1.7.0" # Перевірте наявність останньої стабільної версії
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
sudo mv node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64 /usr/local/node_exporter
Створення користувача та служби Node Exporter
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown -R node_exporter:node_exporter /usr/local/node_exporter
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/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
Запуск Node Exporter та увімкнення брандмауера
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo ufw allow 9100/tcp
Перевірте, чи працює Node Exporter, відвідавши http://<YOUR_MONITORED_SERVER_IP>:9100/metrics у вашому браузері. Ви повинні побачити сторінку, повну метрик.
Додавання Node Exporter до конфігурації Prometheus (Сервер моніторингу)
Повернувшись на ваш *сервер моніторингу*, відредагуйте /etc/prometheus/prometheus.yml, щоб додати нову ціль:
sudo nano /etc/prometheus/prometheus.yml
Додайте новий запис scrape_configs:
...
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['<YOUR_MONITORED_SERVER_IP>:9100'] # Замініть на фактичну IP-адресу
labels:
instance: 'my_first_server'
Перезавантажте Prometheus, щоб застосувати зміни:
sudo systemctl reload prometheus
Перевірте інтерфейс Prometheus (http://<YOUR_MONITORING_SERVER_IP>:9090/targets), щоб переконатися, що Node Exporter відображається та працює коректно.
Крок 4: Встановлення Grafana (Сервер моніторингу)
Grafana надає рівень візуалізації для ваших даних Prometheus.
Додавання GPG ключа та репозиторію 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
Встановлення Grafana
sudo apt install -y grafana
Запуск Grafana та увімкнення брандмауера
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo ufw allow 3000/tcp
Доступ до Grafana за адресою http://<YOUR_MONITORING_SERVER_IP>:3000. Логін за замовчуванням admin / admin. Вам буде запропоновано змінити пароль.
Додавання Prometheus як джерела даних у Grafana
- Увійдіть до Grafana.
- Натисніть іконку шестерні (Конфігурація) на лівій бічній панелі, потім Джерела даних.
- Натисніть Додати джерело даних та оберіть Prometheus.
- Встановіть Ім'я (наприклад,
Prometheus). - Для URL введіть
http://localhost:9090(оскільки Grafana знаходиться на тому ж сервері). - Натисніть Зберегти та перевірити. Ви повинні побачити повідомлення "Джерело даних працює".
Крок 5: Імпорт інформаційних панелей та створення сповіщень (Сервер моніторингу)
Імпорт інформаційної панелі Node Exporter
Grafana Labs надає багато інформаційних панелей, створених спільнотою. Популярна для Node Exporter має ID 1860.
- На лівій бічній панелі натисніть іконку плюса (Створити), потім Імпорт.
- Введіть
1860у поле "Імпорт через grafana.com" та натисніть Завантажити. - Оберіть ваше джерело даних Prometheus та натисніть Імпорт.
Тепер ви повинні побачити комплексну інформаційну панель, що візуалізує метрики з вашого сервера, що моніториться.
Базові сповіщення за допомогою Prometheus та Grafana
Prometheus обробляє правила сповіщень, тоді як Grafana може візуалізувати та надсилати сповіщення про ці сповіщення.
- Правила сповіщень Prometheus: Створіть файл, наприклад
/etc/prometheus/alert.rules.yml, з правилами (наприклад, високе використання CPU, мало місця на диску). - Конфігурація Prometheus: Оновіть
prometheus.yml, щоб включитиrule_files: ['/etc/prometheus/alert.rules.yml']. - Alertmanager: Для розширеної маршрутизації сповіщень (електронна пошта, Slack, PagerDuty) встановіть та налаштуйте Prometheus Alertmanager.
- Сповіщення Grafana: Ви також можете налаштувати сповіщення безпосередньо на інформаційних панелях Grafana, які можуть запускати сповіщення на основі результатів запитів.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Масштабування вашої системи моніторингу
Ресурси, необхідні для вашого стеку моніторингу Prometheus і Grafana, значною мірою залежать від кількості моніторингових кінцевих точок, частоти збору даних та періоду зберігання ваших метрик. Важливо вибрати відповідне серверне обладнання, щоб забезпечити надійність та продуктивність вашої системи моніторингу в міру зростання вашої інфраструктури.
| Кількість моніторингових кінцевих точок (Node Exporters) | vCPU/Ядра | RAM | Диск (Тип + ГБ) | Місячна пропускна здатність |
|---|---|---|---|---|
| До 10 | 2 vCPU | 4 ГБ | 50 ГБ NVMe | 1 ТБ |
| 10 - 50 | 4 vCPU | 8 ГБ | 100 ГБ NVMe | 2 ТБ |
| 50 - 150 | 6-8 Ядер | 16-32 ГБ | 200 ГБ NVMe | 5 ТБ |
| 150+ (Висока щільність) | 8+ Ядер | 32+ ГБ | 500+ ГБ NVMe (RAID 1) | 10+ ТБ |
Вирішення поширених проблем
- Інтерфейс Prometheus недоступний (9090): Перевірте брандмауер (
sudo ufw status) та статус служби Prometheus (sudo systemctl status prometheus). Переконайтеся, що--web.external-urlправильно встановлено у файлі служби. - Node Exporter недоступний (9100): Перевірте брандмауер на сервері, що моніториться, та статус служби Node Exporter.
- Цілі не працюють у Prometheus: Перевірте мережеве з'єднання між серверами моніторингу та моніторинговими серверами. Переконайтеся, що Node Exporter працює на цілі, а його IP/порт правильні у
prometheus.yml. - Помилка джерела даних Grafana: Переконайтеся, що Prometheus працює на порту 9090. Перевірте логи сервера Grafana (
sudo journalctl -u grafana-server -f) на наявність помилок. - Відсутні метрики в Grafana: Переконайтеся, що на вашій інформаційній панелі вибрано правильне джерело даних Prometheus. Перевірте, чи Prometheus дійсно збирає дані з цілі (перевірте інтерфейс Prometheus -> Status -> Targets).
- Закінчується місце на диску: Prometheus зберігає дані метрик. Налаштуйте політики зберігання у
prometheus.yml(наприклад,--storage.tsdb.retention.time=30d) або розгляньте рішення для віддаленого зберігання для довгострокового зберігання.