Установка Prometheus и Node Exporter на AlmaLinux 9

Кратко о Prometheus и архитектуре мониторинга
Prometheus — это система мониторинга и алертинга с открытым исходным кодом. Она собирает численные метрики через HTTP-эндпоинты, хранит их как временные ряды и позволяет извлекать данные с помощью языка запросов PromQL.
Ключевая идея: каждый временной ряд определяется именем метрики и набором пар ключ/значение (лейблов). Прометей тянет метрики у экспортеров, запущенных на целевых серверах. Node Exporter — стандартный экспортер для Linux: он открывает метрики о ядре, железе, сети, дисках и т. п.
Определение в одну строку:
- Prometheus — сервер сбора и хранения временных рядов.
- Node Exporter — агент, который экспортирует системные метрики в формате, понятном Prometheus.
Важно: Prometheus по умолчанию опрашивает (scrape) цели, он не «толкает» конфигурацию на агенты.
Что будет сделано в руководстве
- Создать системных пользователей для Prometheus и Node Exporter.
- Установить бинарные пакеты Prometheus и Node Exporter на AlmaLinux 9.
- Настроить prometheus.yml для сбора собственных метрик и метрик от Node Exporter.
- Запустить службы через systemd и проверить через интерфейс Prometheus.
- Обсудить безопасность, масштабирование и отладку.
Требования
- Две машины AlmaLinux 9 (в примере: 192.168.10.20 — Prometheus, 192.168.10.21 — Node Exporter).
- Пользователь с sudo.
- Доступ к интернету для скачивания релизов Prometheus и Node Exporter.
Основные понятия
- scrape target: конечная точка, которую опрашивает Prometheus.
- exporter: приложение, которое переводит системные метрики в понятный Prometheus формат.
- PromQL: язык запросов Prometheus для извлечения и агрегации метрик.
Подготовка: создать пользователя и директории для Prometheus
Выполните команды на сервере Prometheus (192.168.10.20):
sudo adduser -M -r -s /sbin/nologin prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
Пояснение: пользователь prometheus без shell повышает безопасность — служба работает от имени несуперпользователя.
Установка Prometheus из предварительно собранного архива
- Установите wget, если он отсутствует:
sudo dnf install wget -y
- Скачайте релиз и распакуйте (примеры команд делают это в /usr/src):
cd /usr/src
wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz
tar -xf prometheus-2.44.0.linux-amd64.tar.gz- Скопируйте конфигурацию и консоли в /etc/prometheus и бинарники в /usr/bin:
sudo cp /usr/src/prometheus-*/prometheus.yml /etc/prometheus/
sudo cp -r /usr/src/prometheus-*/consoles /etc/prometheus
sudo cp -r /usr/src/prometheus-*/console_libraries /etc/prometheus
sudo cp /usr/src/prometheus-*/prometheus /usr/bin/
sudo cp /usr/src/prometheus-*/promtool /usr/bin/
sudo chown -R prometheus:prometheus /etc/prometheus
- Проверка:
which prometheus
prometheus --version
which promtool
promtool --version
Базовая конфигурация Prometheus
Откройте файл /etc/prometheus/prometheus.yml и добавьте задачу для самого Prometheus, чтобы он собирал свои метрики:
# конфигурация скрейпа для самого Prometheus
scrape_configs:
- job_name: prometheus
static_configs:
- targets: [192.168.10.20:9090]Сохраните файл.
Создайте systemd-сервис для Prometheus в /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/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
[Install]
WantedBy=multi-user.targetПримените изменения и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheusЕсли всё в порядке, сервис должен быть active (running). Откройте веб-интерфейс http://192.168.10.20:9090 и убедитесь, что отображается граф.

Проверить Targets: Status → Targets. Должно быть job prometheus с состоянием UP.

Установка Node Exporter на целевом сервере
Перейдите на сервер Node Exporter (192.168.10.21) и выполните:
sudo adduser -M -r -s /sbin/nologin node_exporter
sudo dnf install wget -y
cd /usr/src
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xf node_exporter-1.6.0.linux-amd64.tar.gz
sudo mv node_exporter-*/node_exporter /usr/bin
which node_exporter
node_exporter --version
Создайте systemd-сервис /etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/bin/node_exporter
[Install]
WantedBy=multi-user.targetЗапустите сервис и включите автозапуск:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporterПо умолчанию Node Exporter слушает порт 9100. Проверьте:
ss -tulpn | grep nodeОткройте http://192.168.10.21:9100/ — вы должны увидеть экспортированные метрики.

Добавление Node Exporter в Prometheus
На сервере Prometheus откройте /etc/prometheus/prometheus.yml и добавьте задачу:
- job_name: node_exporter_metrics
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.21:9100']Сохраните и перезапустите Prometheus:
sudo systemctl restart prometheusВ веб-интерфейсе Prometheus проверьте Status → Targets: должна появиться задача node_exporter_metrics со статусом UP.

Используйте Graph и ищите метрики, начинающиеся с node_. Например:
- node_network_iface_id
- node_os_info
- node_load15

Примеры полезных PromQL-запросов
# Список сетевых интерфейсов
node_network_iface_id
# Информация об ОС
node_os_info
# Средняя нагрузка за 15 минут
node_load15
# Процент использования CPU по квантили
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)Совет: в PromQL фигурные скобки используют лейблы. Пробуйте запросы в поле Expression и переключайтесь между табами Graph и Console.
Проверка и приёмка установки
Критерии приёмки
- Prometheus запущен и отвечает на 9090.
- Node Exporter запущен на целевом узле и отвечает на 9100.
- В Prometheus в Status → Targets оба задания имеют статус UP.
- Примеры PromQL возвращают ожидаемые метрики.
Тесты/критерии
- curl -s http://192.168.10.21:9100/metrics | head — должно вернуть метрики Node Exporter.
- systemctl status prometheus — статус active.
Рольовые чеклисты
Для SRE/DevOps:
- Проверить автозапуск systemd.
- Добавить мониторинг дискового пространства, CPU, сетевых интерфейсов.
- Настроить правила алертов (Alertmanager) при увеличении нагрузки.
Для администратора безопасности:
- Ограничить доступ к портам 9090 и 9100 через firewall.
- Запустить Prometheus и Node Exporter под непривилегированными пользователями.
Для разработчика приложения:
- Подумать о добавлении экспортеров для приложений (например, экспортеры для JVM, PostgreSQL и т. д.).
Базовые рекомендации по безопасности
- Firewall
- Ограничьте доступ к Prometheus (9090) только из сети доверенного сервера или через VPN.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="9090" accept'
sudo firewall-cmd --reload- Разграничение прав
- Службы должны работать под системными пользователями без shell.
- TLS и аутентификация
- В продакшне рассмотрите проксирование Prometheus через nginx/Traefik с TLS и базовой аутентификацией или OAuth.
- Ограничение доступа к консоли и файлам с конфигурацией
- /etc/prometheus должен быть доступен только для root и пользователя prometheus.
Масштабирование и устойчивость
- Prometheus хорош для single-node хранения. Для крупных установок используйте federation, remote_write или проекты типа Thanos/Cortex.
- Для горизонтального масштабирования: собирать метрики локально на каждом шардированном сервере и аггрегировать через прокси/федерацию.
- Хранение: по умолчанию Prometheus хранит данные локально; убедитесь, что /var/lib/prometheus располагается на разделе с достаточным пространством.
Отладка: частые проблемы и решения
Проблема: target в Status → Targets в состоянии DOWN.
- Проверьте, слушает ли node_exporter на 9100: curl -v http://192.168.10.21:9100/
- Проверьте правила firewall.
- Убедитесь, что в prometheus.yml правильно указан порт и IP.
Проблема: Prometheus не запускается после редактирования prometheus.yml.
- Запустите promtool check config /etc/prometheus/prometheus.yml
- Проверьте journalctl -u prometheus –no-pager –since “5 minutes ago”
Проблема: высокая загрузка диска из-за хранения данных.
- Настройте retention в опциях запуска: –storage.tsdb.retention.time=15d
- Рассмотрите remote_write для длительного хранения.
Шаблон minimal prometheus.yml для примера
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: [192.168.10.20:9090]
- job_name: node_exporter_metrics
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.21:9100']Интеграция с Grafana (кратко)
- Добавьте Prometheus как источник данных в Grafana (URL: http://192.168.10.20:9090).
- Импортируйте готовые дашборды для Node Exporter из Grafana.com или создайте свои.
Безопасность данных и приватность
Prometheus хранит метрики в виде временных рядов. Если метрики содержат чувствительные данные (например, идентификаторы пользователей), избегайте их экспонирования. В продакшне применяйте:
- фильтрацию лейблов на источнике;
- прокси с TLS и аутентификацией;
- аудит доступа к интерфейсу Prometheus.
Процедура отката (rollback)
- Если после изменения prometheus.yml появились ошибки, восстановите резервную копию /etc/prometheus/prometheus.yml.bak.
- sudo systemctl restart prometheus
- Если проблема связана с новой версией Prometheus, верните старый бинарник и перезапустите службу.
Чеклист перед переходом в продакшн
- Prometheus и Node Exporter работают под непривилегированными пользователями.
- Доступ к 9090/9100 ограничен сетевыми правилами.
- Настроены retention и резервное копирование данных.
- Настроены алерты и процесс их обработки (Alertmanager).
- Документирована процедура отката.
Примерные сценарии тестов / критерии приёмки
- Проверка доступности метрик: curl -s http://192.168.10.21:9100/metrics | grep node_cpu_seconds_total
- Проверка Target в Prometheus: Статус UP в Status → Targets.
- Проверка Grafana: данные из Prometheus отображаются на дашборде.
Часто встречающиеся расширения и альтернативы
- Для долгосрочного хранения: Cortex, Thanos, Mimir.
- Для управления конфигурацией: Ansible или Terraform.
- Для визуализации: Grafana.
Руководство по обновлению версий
- Сделайте бэкап /etc/prometheus и /var/lib/prometheus (если нужно).
- Скачать новую версию, остановить службу, заменить бинарники, запустить службу и проверить совместимость конфигурации с promtool.
Полезные команды для администрирования
sudo journalctl -u prometheus -f
sudo journalctl -u node_exporter -f
sudo systemctl restart prometheus
sudo systemctl restart node_exporter
promtool check config /etc/prometheus/prometheus.ymlРешение по принятию: быстрое дерево решения
flowchart TD
A[Нужно мониторить сервер?] -->|Да| B[Установить node_exporter]
A -->|Нет| Z[Не ставить]
B --> C[Добавить в prometheus.yml]
C --> D{Target UP?}
D -->|Да| E[Настроить дашборды и алерты]
D -->|Нет| F[Проверить firewall и service status]
F --> DЧастые вопросы (FAQ)
Как проверить конфигурацию Prometheus перед перезапуском?
Выполните promtool check config /etc/prometheus/prometheus.yml. Это покажет синтаксические ошибки.
Можно ли запускать Node Exporter в контейнере?
Да. Node Exporter может запускаться как бинарник на хосте или в контейнере, важно предоставить доступ к необходимым системным данным.
Как долго Prometheus хранит данные по умолчанию?
По умолчанию хранение ограничено настройками TSDB; для продакшна желательно задать явный параметр retention или использовать remote_write.
Заключение
Вы установили Prometheus на AlmaLinux 9 и подключили к нему Node Exporter на удалённом сервере. Дальше можно расширять метрики, подключать дополнительные экспортеры, настраивать Alertmanager и интегрировать Grafana для визуализации. Следуйте чеклистам по безопасности и резервному копированию перед переводом в продакшн.

Важное: эта инструкция ориентирована на базовую установку. Для крупномасштабных или чувствительных окружений добавьте TLS, аутентификацию и долгосрочное хранилище метрик.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента