
Ищете способ контролировать нагрузку и отслеживать состояние сервера в реальном времени? Рассказываем, как развернуть систему мониторинга с нуля: установить на VPS, настроить сбор метрик и запустить как службу.
Prometheus — приложение, которое превращает «сырые» показатели сервера в структурированную информацию, готовую для анализа.

Для визуализации этих данных чаще всего используют Grafana — гибкий дашборд с широкими возможностями настройки.
Эта статья — часть серии руководств по мониторингу серверов с использованием Prometheus и Grafana, и в ней мы разберём, как установить Prometheus, настроить его для самостоятельного мониторинга и подготовить основу для дальнейшего масштабирования. Вы поймёте, как работают конфигурационные файлы, научитесь управлять сервисом через systemd и избежите типичных ошибок.
Установка и подготовка среды
Начнём с загрузки актуальной версии Prometheus. Официальный сайт проекта рекомендует скачивать бинарники напрямую с GitHub — так вы установите актуальную версию, избежав использования устаревших пакетов из репозиториев. Для примера возьмём версию 3.4.0 для архитектуры amd64, но перед установкой всегда проверяйте страницу релизов, чтобы выбрать последнюю стабильную сборку.
Откройте терминал и выполните:
wget https://github.com/prometheus/prometheus/releases/download/v3.4.0/prometheus-3.4.0.linux-amd64.tar.gz
wget загрузит архив, далее распакуем его (подставьте вместо звёздочки номер версии):
tar -xvf prometheus-*.tar.gz
Флаг -x активирует извлечение файлов, -v включает подробный вывод (чтобы видеть прогресс), -f указывает на архив. После распаковки появится директория prometheus-* с двумя исполняемыми файлами и поддиректориями.
Также можно установить Prometheus из стандартного репозитория:
apt install prometheus
Это проще, но в официальных репозиториях часто лежат версии на 1-2 года старше актуальных, поэтому мы рекомендуем ручную установку.
Переместим папку с Prometheus в /opt/prometheus — стандартный путь для установки стороннего ПО, что упрощает управление:
mv prometheus-* /opt/prometheus
Вы можете выбрать и другое место, но тогда придётся корректировать пути в конфигах и сервисных файлах.
Теперь создадим специального пользователя prometheus без домашнего каталога и с заблокированным shell — это повысит безопасность:
sudo useradd --no-create-home --shell /bin/false prometheus
--no-create-home не создаёт домашнюю директорию /home/prometheus (она не нужна для фоновой службы), а --shell /bin/false запрещает вход под этим пользователем.
Настроим разрешения на доступ в директорию /opt/prometheus:
sudo chown -R prometheus:prometheus /opt/prometheus
Флаг -R (рекурсивно) применяет изменения ко всем файлам и поддиректориям. Без этого Prometheus не сможет записывать данные в директорию data/, что приведёт к ошибкам.
Конфигурация: объясняем Prometheus, что и как мониторить
prometheus.yml — главный конфиг приложения, он определяет:
- как часто собирать метрики,
- что нужно мониторить,
- где хранить данные,
- как обрабатывать правила оповещений.
Создадим этот файл в /opt/prometheus:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
Разберём каждую директиву:
- global — общие настройки (для всех заданий):
- scrape_interval: 15s — интервал сбора метрик. 15 секунд — значение, обеспечивающее баланс между актуальностью данных и нагрузкой на систему. Для высоконагруженных систем с 50+ нодами лучше увеличить до 30-60s;
- evaluation_interval: 15s — как часто проверять правила алертов (мы не настраиваем алерты в этой статье, но параметр обязателен);
- scrape_configs — список источников данных (targets):
- job_name: "prometheus" — имя задания. Позже добавятся другие (например, для Node Exporter);
- static_configs — статический список источников. Вместо этого можно использовать File-based discovery, Consul, Kubernetes API, но для начала хватит статики.
Если нужно мониторить больше одного сервера, перечислите их через запятую. Пример конфигурации для нескольких серверов:
- job_name: "webservers"
static_configs:
- targets: ["10.0.1.5:9100", "10.0.1.6:9100", "10.0.1.7:9100"]
Запуск как службы через systemd
Чтобы Prometheus работал после перезагрузки сервера и автоматически восстанавливался после сбоев, создадим systemd-юнит /etc/systemd/system/prometheus.service и добавим в этот файл:
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/prometheus/data \
--web.listen-address=0.0.0.0:9090
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
Разберём подробнее:
- Wants=network-online.target — ждём полной инициализации сети перед запуском;
- After=network-online.target — сервис запустится после активации сетевых интерфейсов. Это гарантирует, что Prometheus не запустится до полной инициализации сети (например, если метрики собираются с удалённых узлов);
- User/Group — ограничиваем права процесса;
- User=prometheus — от имени этого пользователя запускается процесс (он был создан на предыдущем шаге);
- ExecStart — запуск и полный путь к бинарнику Prometheus;
- --config.file — путь к файлу конфигурации;
- --storage.tsdb.path — явно указываем путь к данным (по умолчанию data/ в текущей директории);
- --web.listen-address — меняем с localhost:9090 на 0.0.0.0:9090, чтобы веб-интерфейс был доступен извне (не забудьте настроить файрвол!);
- Restart=always — автоматический перезапуск при сбоях;
- RestartSec=30 — пауза перед перезапуском после сбоя.
Примените изменения и запустите службу командами daemon-reload, start prometheus, enable prometheus.
Конфиги systemd будут перечитаны (обязательно после создания/изменения юнита), а служба запущена и добавлена в автозагрузку.
Проверка работы
Перейдите в браузере по адресу http://IP_сервера:9090. Если виден веб-интерфейс приложения — установка прошла успешно. Если страница недоступна, проверьте статус сервиса. Если статус failed:
- изучите логи:
sudo journalctl -u prometheus --since "10 minutes ago"
- проверьте, открыт ли порт 9090:
sudo ss -tulpn | grep 9090
Ожидаемый вывод:
tcp LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:* users:(("prometheus",pid=1234,fd=7))
Также проверьте конфиг на синтаксические ошибки:
/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml check-config
Важно
Не оставляйте порт 9090 публично доступным. Настройте брандмауэр (UFW/iptables) или используйте обратный прокси с аутентификацией (например, Nginx + Basic Auth).
Настройки безопасности
По умолчанию Prometheus не требует аутентификации, работает по HTTP и прослушивает все интерфейсы (0.0.0.0), что создаёт потенциальную угрозу безопасности. Поэтому примите минимальные меры защиты.
Ограничьте доступ на уровне фаервола (для UFW):
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 9090
Эта команда запретит публичный доступ.
Для продвинутой защиты настройте HTTPS через обратный проки (Nginx/Apache) и добавьте Basic Auth.
Заключение
Сейчас Prometheus мониторит только сам себя. Чтобы он следил за состоянием VPS, установите Node Exporter для сбора метрик процессора, ОЗУ, диска и Grafana для визуализации. Не забудьте добавить алерты в Telegram при аномальной нагрузке.
Перед переходом к следующим шагам проверьте, что в веб-интерфейсе Prometheus (раздел Status → Targets) отображается источник prometheus со статусом UP. Это означает, что система готова к расширению функционала.
Читайте в блоге:
- Как настроить мониторинг сервера: метрики и методы
- Как установить и настроить PostgreSQL в Ubuntu 22.04
- Развёртывание Node.js-приложения на VPS с PM2: практическое руководство