Почему Prometheus и Grafana для мониторинга на выделенном сервере?
Мониторинг является критически важным компонентом для поддержания здоровой и производительной серверной инфраструктуры. Для сред на выделенном сервере (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)
- ОЗУ: 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 в качестве источника данных:
- Нажмите значок шестеренки (Configuration) на левой боковой панели, затем 'Data sources'.
- Нажмите 'Add data source'.
- Выберите 'Prometheus'.
- В поле 'Name' введите
Prometheus. - В поле 'URL' введите
http://localhost:9090. - Прокрутите вниз и нажмите 'Save & Test'. Вы должны увидеть 'Data source is working'.
Импорт дашборда Node Exporter:
- Нажмите значок '+' (Create) на левой боковой панели, затем 'Import'.
- В поле 'Import via grafana.com' введите
1860(популярный ID дашборда Node Exporter Full). - Нажмите 'Load'.
- На следующем экране выберите ваш источник данных 'Prometheus' из выпадающего списка.
- Нажмите 'Import'.
Теперь вы должны увидеть комплексный дашборд, отображающий метрики из ваших экземпляров Node Exporter. Вы можете переключаться между различными целями Node Exporter, если у вас настроено несколько.
Устранение распространенных проблем
- Служба не запускается: Проверьте логи systemd с помощью
sudo journalctl -u prometheus.serviceилиsudo journalctl -u grafana-server.serviceна наличие ошибок. - Prometheus не собирает метрики с целей: Проверьте IP-адреса и порты целей в
/etc/prometheus/prometheus.yml. Проверьте страницу 'Status -> Targets' в пользовательском интерфейсе Prometheus на наличие ошибок сбора. Убедитесь, что брандмауэры открыты как на сервере Prometheus (порты 9090, 9100), так и на отслеживаемых серверах (порт 9100). - Grafana не подключается к Prometheus: Дважды проверьте URL источника данных Prometheus в Grafana. Убедитесь, что Prometheus запущен и доступен с сервера Grafana.
- Отсутствуют метрики в Grafana: Убедитесь, что Node Exporter запущен на целевом сервере и Prometheus успешно собирает с него метрики. Проверьте страницу 'Graph' в Prometheus, чтобы убедиться, что метрики собираются (например,
node_cpu_seconds_total). - Проблемы с разрешениями: Убедитесь, что пользователи
prometheusиgrafanaявляются владельцами своих соответствующих каталогов и бинарных файлов.
Выбор правильного сервера для вашего стека мониторинга, особенно при управлении многочисленными или критически важными службами, имеет первостепенное значение. Следующая таблица содержит рекомендации по спецификациям сервера в зависимости от масштаба вашей отслеживаемой инфраструктуры.
| Масштаб нагрузки (отслеживаемые серверы) | vCPU (для отслеживаемой нагрузки) | ОЗУ (для отслеживаемой нагрузки) | Диск (Тип + ГБ) | Ежемесячная пропускная способность (для отслеживаемой нагрузки) |
|---|---|---|---|---|
| Малый (1-5 серверов, личные проекты, легкий веб-хостинг) | 4-8 vCPU | 8-16 GB | 240 GB NVMe | 100 Mbps |
| Средний (5-15 серверов, несколько микросервисов, умеренные базы данных, игровые серверы) | 8-16 ядер | 32-64 GB | 480 GB NVMe (RAID1) | 1 Gbps |
| Большой (15+ серверов, высоконагруженные API, крупные кластеры БД, CI/CD, стриминг) | 16-32+ ядер | 64-128+ GB | 1 TB+ NVMe (RAID10) | 10 Gbps |
Дальнейшая настройка и расширенный мониторинг
После того как ваша базовая настройка будет запущена, вы сможете расширить свои возможности мониторинга:
- Alertmanager: Интегрируйте Alertmanager с Prometheus для отправки уведомлений (по электронной почте, в Slack, PagerDuty) при превышении критических порогов.
- Экспортеры для конкретных приложений: Установите другие экспортеры Prometheus для баз данных (например,
mysqld_exporter,postgres_exporter), веб-серверов (например,apache_exporter,nginx_exporter) или очередей сообщений. - Пользовательские дашборды: Создавайте собственные дашборды Grafana, адаптированные к вашим конкретным метрикам приложений и бизнес-потребностям.
- Правила записи (Recording Rules): Используйте правила записи Prometheus для предварительной агрегации часто запрашиваемых данных, улучшая время загрузки дашбордов.
- Удаленное хранилище: Для долгосрочного хранения или высокой доступности рассмотрите возможность интеграции Prometheus с решениями удаленного хранения.