Зачем отслеживать ваш Bare Metal сервер?
Выделенные серверы предлагают непревзойденную мощность, контроль и производительность, но с большой мощностью приходит и ответственность за бдительный надзор. Мониторинг вашего Bare Metal сервера с помощью таких инструментов, как Prometheus и Grafana, — это не просто лучшая практика; это необходимо для:
- Проактивное решение проблем: Обнаруживайте аномалии, узкие места в ресурсах и потенциальные аппаратные сбои до того, как они повлияют на ваши сервисы.
- Оптимизация производительности: Понимайте шаблоны использования CPU, RAM, дискового ввода-вывода (disk I/O) и сети для тонкой настройки приложений и инфраструктуры.
- Управление ресурсами: Точно оценивайте, соответствуют ли текущие спецификации вашего сервера требованиям, или требуется обновление.
- Надежность и время безотказной работы (Uptime): Убедитесь, что ваши критически важные приложения, будь то игровые серверы, высоконагруженные веб-сайты, базы данных или CI/CD-конвейеры, остаются работоспособными и отзывчивыми.
- Планирование мощностей: Собирайте исторические данные для принятия обоснованных решений о будущем масштабировании инфраструктуры.
Для системных администраторов, разработчиков и компаний, использующих выделенный хостинг, надежное решение для мониторинга предоставляет аналитические данные, необходимые для максимизации отдачи от инвестиций в инфраструктуру.
Понимание Prometheus и Grafana
Prometheus и Grafana — это динамичный дуэт в мире мониторинга с открытым исходным кодом. Они разработаны для бесперебойной совместной работы, каждый из них преуспевает в своей специфической области:
Prometheus: Сборщик данных и база данных временных рядов
Prometheus — это набор инструментов с открытым исходным кодом для мониторинга систем и оповещения, изначально разработанный в SoundCloud. Он известен своей мощной многомерной моделью данных (данные временных рядов, идентифицируемые по имени метрики и парам ключ/значение), гибким языком запросов (PromQL) и эффективным хранилищем.
- Модель сбора (Scraping): Prometheus извлекает (scrapes) метрики из настроенных целей через заданные интервалы.
- Экспортеры (Exporters): Небольшие приложения, которые предоставляют метрики из различных сервисов (например, Node Exporter для метрик ОС сервера, Blackbox Exporter для зондирования конечных точек).
- Обнаружение сервисов (Service Discovery): Может динамически обнаруживать цели для мониторинга.
- Alertmanager: Обрабатывает оповещения, отправленные Prometheus, дедуплицируя, группируя и маршрутизируя их по различным каналам уведомлений.
Grafana: Мощный инструмент для визуализации и дашбордов
Grafana — это веб-приложение с открытым исходным кодом для аналитики и интерактивной визуализации. Оно позволяет запрашивать, визуализировать, оповещать и исследовать ваши метрики, независимо от того, где они хранятся. В паре с Prometheus Grafana превращает необработанные данные в интуитивно понятные, действенные дашборды.
- Многофункциональные дашборды: Создавайте пользовательские дашборды с широким набором опций визуализации (графики, таблицы, тепловые карты, одиночные показатели).
- Несколько источников данных: Поддерживает Prometheus, InfluxDB, PostgreSQL, MySQL, Elasticsearch и многие другие.
- Оповещение (Alerting): Определяйте правила оповещения непосредственно в Grafana, чтобы получать уведомления о критических событиях.
- Шаблонизация (Templating): Создавайте динамические и многократно используемые дашборды.
Предварительные условия и требования к серверу
Прежде чем приступить к установке, убедитесь, что ваш выделенный сервер 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, памяти, дискового ввода-вывода (disk I/O), сетевого трафика и многое другое вашего 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. Учтите:
- Срок хранения (Retention): Срок хранения по умолчанию составляет 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) и временем отклика приложений для высоконагруженных веб-сайтов.
- Базы данных: Мониторьте частоту запросов, количество подключений, дисковый ввод-вывод (disk I/O) и использование буферного пула для оптимального состояния и производительности базы данных.
- Почтовые серверы: Следите за размером очереди почты, входящим/исходящим трафиком и потреблением ресурсов для предотвращения проблем с доставкой.
- Стриминговые сервисы: Мониторьте использование пропускной способности, загрузку 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 для тестирования запросов.
- Временной диапазон: Убедитесь, что временной диапазон вашего дашборда Grafana охватывает период, когда данные должны быть доступны.
Ошибки разрешений
Если вы столкнулись с ошибками отказа в доступе во время установки или при запуске служб, дважды проверьте, что файлы и каталоги имеют правильного владельца (например, prometheus:prometheus для файлов Prometheus, node_exporter:node_exporter для Node Exporter) и соответствующие разрешения на чтение/запись.