Почему 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 ядра
- ОЗУ: 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" # Check for the latest stable version on 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" # Check for the latest stable version
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.
- Нажмите на значок шестеренки (Configuration) на левой боковой панели, затем Data sources.
- Нажмите Add data source и выберите Prometheus.
- Установите Name (например,
Prometheus). - Для URL введите
http://localhost:9090(поскольку Grafana находится на том же сервере). - Нажмите Save & Test. Вы должны увидеть сообщение «Data source is working».
Шаг 5: Импорт дашбордов и создание оповещений (Сервер мониторинга)
Импорт дашборда Node Exporter
Grafana Labs предоставляет множество дашбордов, созданных сообществом. Популярным для Node Exporter является дашборд с ID 1860.
- На левой боковой панели нажмите на значок плюса (Create), затем Import.
- Введите
1860в поле «Import via grafana.com» и нажмите Load. - Выберите ваш источник данных Prometheus и нажмите Import.
Теперь вы должны увидеть комплексный дашборд, визуализирующий метрики с вашего отслеживаемого сервера.
Базовое оповещение с помощью Prometheus и Grafana
Prometheus обрабатывает правила оповещений, в то время как Grafana может визуализировать и отправлять уведомления об этих оповещениях.
- Правила оповещений Prometheus: Создайте файл, например
/etc/prometheus/alert.rules.yml, с правилами (например, высокое использование ЦП, мало места на диске). - Конфигурация 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 Exporter) | vCPU/Ядра | ОЗУ | Диск (Тип + ГБ) | Ежемесячная пропускная способность |
|---|---|---|---|---|
| До 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) или рассмотрите решения для удаленного хранения для долгосрочного хранения.