Навіщо моніторити ваш Bare Metal сервер?
Виділені сервери пропонують неперевершену потужність, контроль і продуктивність, але з великою потужністю приходить відповідальність за пильний нагляд. Моніторинг вашого bare metal сервера за допомогою таких інструментів, як Prometheus і Grafana, — це не просто найкраща практика; це необхідно для:
- Проактивне вирішення проблем: Виявляйте аномалії, вузькі місця в ресурсах і потенційні апаратні збої до того, як вони вплинуть на ваші сервіси.
- Оптимізація продуктивності: Розумійте закономірності використання CPU, RAM, дискового вводу/виводу та мережі, щоб точно налаштувати програми та інфраструктуру.
- Управління ресурсами: Точно оцінюйте, чи відповідають поточні специфікації вашого сервера попиту, або чи потрібне оновлення.
- Надійність та безперебійна робота (Uptime): Переконайтеся, що ваші критично важливі програми, будь то ігрові сервери, високотрафікові веб-сайти, бази даних або CI/CD конвеєри, залишаються працездатними та чуйними.
- Планування потужності: Збирайте історичні дані для прийняття обґрунтованих рішень щодо майбутнього масштабування інфраструктури.
Для системних адміністраторів, розробників і компаній, які покладаються на виділений хостинг, надійне рішення для моніторингу надає аналітичні дані, необхідні для максимізації віддачі від інвестицій в інфраструктуру.
Розуміння Prometheus та Grafana
Prometheus і Grafana — це динамічний дует у світі моніторингу з відкритим вихідним кодом. Вони розроблені для бездоганної спільної роботи, кожен з яких відмінно справляється зі своєю специфічною областю:
Prometheus: Збирач даних та часова база даних (Time-Series Database)
Prometheus — це інструментарій для моніторингу та оповіщення систем з відкритим вихідним кодом, спочатку створений у SoundCloud. Він відомий своєю потужною багатовимірною моделлю даних (дані часових рядів, ідентифіковані за назвою метрики та парами ключ/значення), гнучкою мовою запитів (PromQL) та ефективним зберіганням.
- Модель збору (Scraping): Prometheus витягує (збирає) метрики з налаштованих цілей через задані інтервали.
- Експортери: Невеликі програми, які надають метрики з різних сервісів (наприклад, Node Exporter для метрик ОС сервера, Blackbox Exporter для зондування кінцевих точок).
- Виявлення сервісів (Service Discovery): Може динамічно виявляти цілі для моніторингу.
- Alertmanager: Обробляє сповіщення, надіслані Prometheus, дедуплікуючи, групуючи та направляючи їх до різних каналів сповіщень.
Grafana: Потужний інструмент візуалізації та дашбордів
Grafana — це веб-додаток з відкритим вихідним кодом для аналітики та інтерактивної візуалізації. Він дозволяє запитувати, візуалізувати, сповіщати та досліджувати ваші метрики незалежно від того, де вони зберігаються. У поєднанні з Prometheus Grafana перетворює необроблені дані на інтуїтивно зрозумілі, дієві дашборди.
- Багаті дашборди: Створюйте власні дашборди з широким спектром опцій візуалізації (графіки, таблиці, теплові карти, окремі показники).
- Кілька джерел даних: Підтримує Prometheus, InfluxDB, PostgreSQL, MySQL, Elasticsearch та багато інших.
- Сповіщення: Визначайте правила сповіщень безпосередньо в Grafana, щоб повідомляти вас про критичні події.
- Шаблонизація: Створюйте динамічні та багаторазові дашборди.
Передумови та вимоги до сервера
Перш ніж приступити до встановлення, переконайтеся, що ваш виділений сервер Valebyte відповідає цим вимогам:
Операційна система
Цей посібник зосереджений на дистрибутивах Linux на базі Debian/Ubuntu, які є поширеним вибором для bare metal розгортань завдяки їхній стабільності та підтримці спільноти. Команди можуть дещо відрізнятися для систем на базі RHEL/CentOS, але основні концепції залишаються незмінними.
Ресурси сервера
Хоча Prometheus і Grafana ефективні, вони споживають ресурси. Для моніторингу одного bare metal сервера та кількох програм:
- CPU: 1-2 ядра (сучасні багатоядерні CPU ідеальні).
- RAM: 2 ГБ - 4 ГБ виділено для стеку моніторингу (Prometheus може бути інтенсивним до пам'яті при тривалих періодах зберігання або великій кількості метрик).
- Сховище: Рекомендовано 20 ГБ - 50 ГБ SSD для часової бази даних Prometheus (TSDB). Фактична вимога сильно залежить від кількості метрик, їхньої швидкості зміни та бажаного періоду зберігання даних. SSD є критично важливими для хорошої продуктивності TSDB.
- Мережа: Стандартне мережеве підключення.
Доступ та привілеї
- Root або Sudo доступ: Вам знадобляться адміністративні привілеї для встановлення пакетів, створення користувачів та керування системними службами.
- SSH доступ: Доступ Secure Shell до вашого виділеного сервера.
Конфігурація брандмауера
Вам потрібно буде відкрити певні порти у брандмауері вашого сервера (наприклад, UFW на Ubuntu або firewalld на CentOS), щоб дозволити доступ до компонентів моніторингу:
- Prometheus: Порт
9090(для інтерфейсу Prometheus та збору метрик). - Node Exporter: Порт
9100(для метрик Node Exporter). - Grafana: Порт
3000(для веб-інтерфейсу Grafana).
Потрібен виділений сервер?
Compare prices from top providers. Configure and order in minutes.
Покроковий посібник зі встановлення
Почнемо з налаштування вашого стеку моніторингу.
Крок 1: Підготуйте ваш Bare Metal сервер
Спочатку оновіть вашу систему та встановіть необхідні утиліти.
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common
Створіть виділених користувачів
Запуск Prometheus та Node Exporter під непривілейованими користувачами є найкращою практикою безпеки.
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
Налаштуйте брандмауер (Приклад UFW)
Якщо ви використовуєте UFW, увімкніть його та дозвольте необхідні порти.
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 9090/tcp # Prometheus
sudo ufw allow 9100/tcp # Node Exporter
sudo ufw allow 3000/tcp # Grafana
sudo ufw status
Крок 2: Встановіть Prometheus
Завантажте та розпакуйте Prometheus
Відвідайте сторінку завантаження Prometheus, щоб отримати останню стабільну версію. За потреби налаштуйте номер версії.
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
sudo mv prometheus-2.48.0.linux-amd64 /opt/prometheus-2.48.0
Створіть каталоги та встановіть дозволи
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo cp /opt/prometheus-2.48.0/prometheus /usr/local/bin/
sudo cp /opt/prometheus-2.48.0/promtool /usr/local/bin/
sudo cp -r /opt/prometheus-2.48.0/consoles /etc/prometheus
sudo cp -r /opt/prometheus-2.48.0/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
Створіть файл конфігурації Prometheus
Створіть /etc/prometheus/prometheus.yml з наступною базовою конфігурацією. Це початкове налаштування включає сам Prometheus як ціль.
sudo nano /etc/prometheus/prometheus.yml
Додайте наступний вміст:
global:
scrape_interval: 15s # How frequently to scrape targets
evaluation_interval: 15s # How frequently to evaluate rules
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Створіть файл служби Systemd для Prometheus
Це дозволяє 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=0.0.0.0:9090 \
--log.level=info
[Install]
WantedBy=multi-user.target
Перезавантажте Systemd, запустіть та увімкніть Prometheus
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
Перевірте встановлення Prometheus
sudo systemctl status prometheus
Ви повинні побачити статус 'active (running)'. Ви також можете отримати доступ до інтерфейсу Prometheus у вашому веб-браузері за адресою http://YOUR_SERVER_IP:9090. Перейдіть до 'Status' -> 'Targets', щоб перевірити, чи Prometheus збирає метрики з себе.
Крок 3: Встановіть Node Exporter (для метрик сервера)
Node Exporter надає широкий спектр апаратних метрик та метрик ОС із сервера, на якому він працює.
Завантажте та розпакуйте Node Exporter
Отримайте останню стабільну версію зі сторінки завантаження Prometheus.
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo mv node_exporter-1.7.0.linux-amd64 /opt/node_exporter-1.7.0
Перемістіть бінарний файл та встановіть дозволи
sudo cp /opt/node_exporter-1.7.0/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /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=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Перезавантажте Systemd, запустіть та увімкніть Node Exporter
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Перевірте встановлення Node Exporter
sudo systemctl status node_exporter
Ви повинні побачити статус 'active (running)'. Ви також можете перевірити його метрики, відвідавши http://YOUR_SERVER_IP:9100/metrics у вашому браузері.
Налаштуйте Prometheus для збору метрик з Node Exporter
Тепер вкажіть Prometheus збирати метрики з Node Exporter. Відредагуйте ваш файл /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: ['localhost:9100'] # Or YOUR_SERVER_IP:9100 if on a different machine
Збережіть файл та перезапустіть Prometheus, щоб зміни набули чинності:
sudo systemctl restart prometheus
Перевірте в інтерфейсі Prometheus (http://YOUR_SERVER_IP:9090 -> 'Status' -> 'Targets'), що node_exporter відображається та є справним.
Крок 4: Встановіть Grafana
Grafana зазвичай встановлюється з офіційного репозиторію APT.
Додайте 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 -a /etc/apt/sources.list.d/grafana.list
Встановіть Grafana
sudo apt update
sudo apt install grafana -y
Запустіть та увімкніть Grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
Перевірте встановлення Grafana
sudo systemctl status grafana-server
Ви повинні побачити статус 'active (running)'. Отримайте доступ до веб-інтерфейсу Grafana за адресою http://YOUR_SERVER_IP:3000. Логін за замовчуванням — admin / admin. Вам буде запропоновано змінити пароль при першому вході.
Крок 5: Налаштуйте Grafana з джерелом даних Prometheus
Тепер підключимо Grafana до вашого екземпляра Prometheus.
- Увійдіть до Grafana (за замовчуванням:
admin/admin). Змініть пароль, коли буде запропоновано. - У лівому меню наведіть курсор на іконку 'шестерні' (Configuration) та натисніть 'Data Sources'.
- Натисніть 'Add data source'.
- Виберіть 'Prometheus' зі списку.
-
Налаштуйте джерело даних:
- Ім'я:
Prometheus(або будь-яка описова назва). - URL:
http://localhost:9090(абоhttp://YOUR_SERVER_IP:9090, якщо Prometheus знаходиться на іншій машині). - Залиште інші налаштування за замовчуванням поки що.
- Ім'я:
- Натисніть 'Save & Test'. Ви повинні побачити повідомлення на кшталт 'Data source is working'.
Крок 6: Імпорт/Створення дашбордів Grafana
Grafana виділяється своїми дашбордами. Ви можете створювати власні або імпортувати готові шаблони зі спільноти Grafana.
Імпортуйте готовий дашборд (Рекомендовано для Node Exporter)
Популярний дашборд для метрик Node Exporter — це Node Exporter Full (ID: 1860).
- У Grafana наведіть курсор на іконку 'плюс' (Create) у лівому меню та натисніть 'Import'.
- У полі 'Import via grafana.com' введіть
1860та натисніть 'Load'. - Виберіть ваше джерело даних 'Prometheus' зі спадного списку.
- Натисніть 'Import'.
Тепер ви повинні побачити комплексний дашборд, що відображає використання CPU, пам'яті, дискового вводу/виводу, мережевого трафіку вашого bare metal сервера та багато іншого!
Створення власних дашбордів
Для моніторингу конкретних програм або унікальних випадків використання (наприклад, кількість гравців на ігровому сервері, швидкість запитів до бази даних) ви можете створювати власні дашборди:
- Натисніть іконку 'плюс' (Create) та виберіть 'Dashboard'.
- Натисніть 'Add new panel'.
- Виберіть ваше джерело даних Prometheus.
- Використовуйте PromQL (Prometheus Query Language) для запиту ваших метрик (наприклад,
node_cpu_seconds_total,node_memory_MemFree_bytes). - Виберіть тип візуалізації (Graph, Stat, Gauge тощо).
- Налаштуйте заголовки, одиниці виміру та параметри відображення.
Розширена конфігурація та найкращі практики
Сповіщення за допомогою Alertmanager
Хоча Grafana пропонує базові сповіщення, Alertmanager Prometheus розроблений для більш складного маршрутизації, групування та дедуплікації сповіщень. Для критичної bare metal інфраструктури настійно рекомендується налаштувати Alertmanager для надсилання сповіщень електронною поштою, через Slack, PagerDuty або інші канали.
Міркування безпеки
- Брандмауер: Обмежте доступ до портів Prometheus (9090), Node Exporter (9100) та Grafana (3000) до довірених IP-адрес або вашої внутрішньої мережі, де це можливо.
- TLS/SSL: Захистіть Grafana за допомогою HTTPS, особливо якщо вона публічно доступна. Ви можете використовувати зворотний проксі, такий як Nginx або Apache, з Let's Encrypt.
- Надійні паролі: Негайно змініть облікові дані Grafana за замовчуванням.
- Виділені користувачі: Як реалізовано, запуск служб під непривілейованими користувачами підвищує безпеку.
Міркування щодо зберігання
Prometheus зберігає дані локально у своїй TSDB. Розгляньте:
- Зберігання: Термін зберігання за замовчуванням становить 15 днів. Налаштуйте
--storage.tsdb.retention.time(наприклад,--storage.tsdb.retention.time=30d) або--storage.tsdb.retention.size(наприклад,--storage.tsdb.retention.size=50GB) у вашому файліprometheus.service. Довший термін зберігання вимагає більше дискового простору. - Тип диска: SSD настійно рекомендуються для каталогу даних Prometheus (
/var/lib/prometheus) через їхню високу продуктивність вводу/виводу.
Моніторинг кількох серверів
Щоб моніторити додаткові bare metal сервери, просто встановіть Node Exporter на кожному сервері та налаштуйте ваш центральний екземпляр Prometheus для збору метрик з їхніх відповідних кінцевих точок :9100. Оновіть ваш prometheus.yml:
- job_name: 'additional_servers'
static_configs:
- targets: ['server2_ip:9100', 'server3_ip:9100']
Реальні випадки використання моніторингу
- Ігрові сервери: Відстежуйте завантаження CPU, затримку мережі та використання пам'яті, щоб забезпечити безперебійний ігровий процес. Моніторте специфічні метрики ігрових серверів за допомогою власних експортерів.
- Веб-хостинг: Спостерігайте за метриками веб-сервера (Nginx/Apache), продуктивністю баз даних (MySQL/PostgreSQL) та часом відгуку програм для високотрафікових веб-сайтів.
- Бази даних: Моніторте швидкість запитів, кількість з'єднань, дисковий ввід/вивід та використання буферного пулу для оптимального стану та продуктивності бази даних.
- Поштові сервери: Слідкуйте за розміром черги пошти, вхідним/вихідним трафіком та споживанням ресурсів, щоб запобігти проблемам з доставкою.
- Стримінгові сервіси: Моніторте використання пропускної здатності, завантаження CPU під час кодування/транскодування та продуктивність сховища.
- CI/CD конвеєри: Відстежуйте використання ресурсів агентами збірки, час виконання завдань та загальний стан конвеєра для виявлення вузьких місць.
Вирішення поширених проблем
Prometheus не запускається або не збирає метрики
- Помилки конфігурації: Використовуйте
promtool check config /etc/prometheus/prometheus.ymlдля перевірки вашого файлу конфігурації Prometheus. - Конфлікти портів: Переконайтеся, що порт 9090 не використовується іншою програмою. Перевірте логи за допомогою
sudo journalctl -u prometheus.service. - Дозволи: Перевірте, чи має користувач
prometheusдоступ для читання до/etc/prometheus/prometheus.ymlта доступ для запису до/var/lib/prometheus. - Брандмауер: Переконайтеся, що порт 9090 відкритий.
Node Exporter недоступний
- Статус служби: Перевірте, чи працює Node Exporter:
sudo systemctl status node_exporter. - Брандмауер: Підтвердьте, що порт 9100 відкритий на сервері, де працює Node Exporter.
- Конфігурація Prometheus: Двічі перевірте IP/ім'я хоста та порт цілі в
prometheus.yml. - Журнали: Перегляньте
sudo journalctl -u node_exporter.serviceна наявність помилок.
Проблеми з підключенням джерела даних Grafana
- Статус Prometheus: Переконайтеся, що Prometheus працює та доступний із сервера, на якому розміщено Grafana (якщо вони окремі).
- Брандмауер: Перевірте, чи порт 9090 відкритий з точки зору Grafana.
- Правильність URL: Підтвердьте, що URL Prometheus у конфігурації джерела даних Grafana є правильним (наприклад,
http://localhost:9090).
Відсутні метрики в Grafana
- Цілі Prometheus: Перевірте інтерфейс Prometheus (Status -> Targets), щоб переконатися, що всі очікувані цілі (Prometheus, Node Exporter) працюють та справні.
- Запит PromQL: Перевірте, чи ваші запити PromQL у Grafana правильні та націлені на метрики, які ви очікуєте. Спочатку використовуйте інтерфейс 'Graph' Prometheus UI для тестування запитів.
- Діапазон часу: Переконайтеся, що діапазон часу вашого дашборда Grafana охоплює період, коли дані мають бути доступними.
Помилки дозволів
Якщо ви стикаєтеся з помилками відмови в доступі під час встановлення або запуску служб, двічі перевірте, чи мають файли та каталоги правильного власника (наприклад, prometheus:prometheus для файлів Prometheus, node_exporter:node_exporter для Node Exporter) та відповідні дозволи на читання/запис.