Оглавление
Введение
Представьте, что у вашего сервера своя «панель приборов», где в реальном времени видны загрузка CPU, использование памяти и даже мельчайшие сбои. Зачем гадать о состоянии VPS на ощупь, когда можно держать руку на пульсе сервера? Решение — развернуть собственный мониторинг. Популярные в мире DevOps инструменты Prometheus и Grafana помогут отслеживать здоровье инфраструктуры без лишних затрат. Эта статья покажет, как происходит мониторинг сервера VPS своими силами: от установки Prometheus и Grafana на Ubuntu до сбора метрик, настройки дашбордов и тревог. Готовы стать себе админом-наблюдателем? Тогда приступим!
Установка Prometheus на Ubuntu 22.04
Начнем с сердца системы мониторинга — Prometheus. Это open-source платформа для сбора метрик и оповещений, изначально созданная в SoundCloud. Prometheus работает как база данных временных рядов: регулярно опрашивает ваши сервисы и серверы, сохраняя метрики для анализа. Мы установим Prometheus на сервер с Ubuntu 22.04.
Шаг 1. Скачиваем Prometheus. Тут без сюрпризов: идём в раздел релизов Prometheus на GitHub и берём самый свежий архив под свою архитектуру (чаще всего linux‑amd64). Версию из apt можно смело пропускать — она обычно живёт в прошлом. Допустим, сейчас актуальна 2.45.3; тогда команда скачивания будет выглядеть примерно так:
wget https://github.com/prometheus/prometheus/releases/download/v2.45.3/prometheus-2.45.3.linux-amd64.tar.gz
Эта команда загрузит архив с бинарниками Prometheus. Почему не использовать просто apt install? Во-первых, версия из стандартного репозитория Ubuntu может быть устаревшей на 1–2 года. Чтобы не жертвовать новыми фишками, лучше взять релиз с официального источника.
Шаг 2. Установка и первый запуск. Распакуйте архив и перенесите файлы в удобное место. Например, разархивируем и переместим папку в /opt/prometheus – это стандартный путь для стороннего ПО:
tar -xvf prometheus-*.tar.gz
sudo mv prometheus-*/ /opt/prometheus
Создадим отдельного системного пользователя для Prometheus (без доступа к консоли, для безопасности) и дадим ему права на директорию:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /opt/prometheus
Теперь настроим сам Prometheus. В распакованной папке должен быть файл prometheus.yml – главный конфиг. Его можно оставить базовым для старта. Укажем Prometheus, что нужно мониторить самого себя (это полезно и по умолчанию часто включено). Откройте /opt/prometheus/prometheus.yml в редакторе и убедитесь, что там есть блок:
global:
scrape_interval: 15s # частота сбора метрик
evaluation_interval: 15s # частота оценки правил (алертов)
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
Этот минимальный конфиг говорит Prometheus собирать метрики каждые 15 секунд и брать данные с локального таргета localhost:9090 – то есть с собственного веб-интерфейса. Этого достаточно, чтобы запустить службу и проверить, что Prometheus работает.
Шаг 3. Запуск Prometheus как службы. Чтобы мониторинг не останавливался, даже если вы выйдете из системы или перезагрузите сервер, настроим Prometheus как сервис systemd. Создайте файл /etc/systemd/system/prometheus.service со следующим содержимым:
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
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=15
[Install]
WantedBy=multi-user.target
Обратите внимание на опцию --web.listen-address=0.0.0.0:9090: мы меняем адрес прослушивания с localhost на 0.0.0.0, чтобы веб-интерфейс Prometheus был доступен извне (не забудьте открыть порт 9090 в файрволе). После сохранения файла выполните перезагрузку конфигурации и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
Теперь Prometheus работает в фоне. Можно проверить через systemctl status prometheus или открыть в браузере http://<IP-сервера>:9090. Если видите страничку с логотипом Prometheus и полем для запросов – поздравляем, Prometheus успешно установлен!

Сбор метрик CPU, RAM, дисков и сети с помощью Node Exporter
Prometheus сам по себе собирает только то, что ему скажут. Чтобы мониторить состояние сервера (нагрузку CPU, использование RAM, дисковые IO, сетевой трафик и пр.), нужен специальный агент – Node Exporter. Это легкий демон, который бежит на сервере и периодически отправляет в Prometheus самые общие данные о состоянии системы. Проще говоря, Node Exporter раскрывает "внутренности" сервера: CPU, RAM, диск, сеть – всё под контролем.
Установка node_exporter. Как и Prometheus, node_exporter можно установить двумя способами: через пакетный менеджер (apt) или вручную. Для простоты есть пакет prometheus-node-exporter:
sudo apt update
sudo apt install prometheus-node-exporter
После установки через APT сервис обычно запускается автоматически и сразу начинает слушать на порту 9100. Если вы предпочитаете новейшую версию, можно скачать архив с GitHub (аналогично Prometheus) и запустить бинарник вручную или тоже оформить как службу. Мы предположим, что Node Exporter установлен и запущен.
Зайдите по адресу http://localhost:9100/metrics — если всё прошло нормально, перед вами будет «портянка» текста с цифрами и подписями. Среди них должны попадаться строки вроде node_cpu_seconds_total{mode="idle",...} (сколько времени ядро простаивает), node_memory_MemAvailable_bytes (сколько памяти ещё свободно), node_network_receive_bytes_total (сколько байт прилетело по сети) и много других. Если видите такой поток метрик — node_exporter жив и работает. Дальше осталось самое важное: объяснить Prometheus, откуда именно забирать эти данные.
Подключаем Node Exporter к Prometheus. Чтобы Prometheus начал учитывать показания от node_exporter, ему нужно про этот источник явно рассказать. Для этого в конфиге prometheus.yml описываем отдельную задачу (job): откройте файл и в секции scrape_configs добавьте ещё один блок:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
scrape_interval: 5s
static_configs:
- targets: ["localhost:9100"]
Мы назвали задачу "node_exporter" и указали адрес, где работает экспортёр (у нас это тот же сервер, порт 9100). Частоту сбора можно настроить – тут 5 секунд, что чаще базового интервала. Сохраните изменения и перезапустите Prometheus:
sudo systemctl restart prometheus
Если всё сделано правильно, Prometheus начнет собирать системные метрики. В веб-интерфейсе Prometheus на странице Status → Targets вы должны увидеть оба задания: prometheus и node_exporter со статусом UP (активны). Теперь наш мониторинг знает, как получать цифры по CPU, памяти, диску и сети сервера.
Готовы перейти на современную серверную инфраструктуру?
В King Servers мы предлагаем серверы как на AMD EPYC, так и на Intel Xeon, с гибкими конфигурациями под любые задачи — от виртуализации и веб-хостинга до S3-хранилищ и кластеров хранения данных.
- S3-совместимое хранилище для резервных копий
- Панель управления, API, масштабируемость
- Поддержку 24/7 и помощь в выборе конфигурации
Результат регистрации
...
Создайте аккаунт
Быстрая регистрация для доступа к инфраструктуре
Установка Grafana и подключение к Prometheus
Prometheus собирает метрики, но визуализировать их «из коробки» не очень удобно – встроенный веб-интерфейс примитивен. Для красивых графиков и дашбордов нужен Grafana – мощная платформа для визуализации данных. Grafana берет метрики из Prometheus (или других источников) и строит информативные панели с графиками, индикаторами и т.п.
Шаг 1. Установка Grafana. Grafana доступна в репозитории разработчиков. Добавим его и установим пакет на Ubuntu:
sudo apt-get install -y apt-transport-https gnupg
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
Команды выше добавляют GPG-ключ и репозиторий Grafana, обновляют индекс пакетов и ставят Grafana最新版. После установки запустим сервис и добавим в автозагрузку:
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
Через пару секунд Grafana должна работать (порт по умолчанию 3000). Откройте браузер и перейдите на http://<IP-сервера>:3000. Вы увидите страницу логина Grafana. Введите стандартные credentials: логин admin и пароль admin (при первом входе система предложит сменить пароль).
Шаг 2. Подключение Grafana к источнику данных (Prometheus). Сразу после входа Grafana попросит настроить источник данных. Нажмите «Add data source» и выберите Prometheus. Укажите URL для доступа к Prometheus – например, http://localhost:9090 (или IP вашего сервера с портом 9090). Остальные настройки можно оставить по умолчанию. Нажмите Save & Test – Grafana сообщит “Data source is working”, то есть подключение успешно.
Теперь Grafana может брать все метрики, которые собирает Prometheus. Осталось самое интересное – настроить дашборды и увидеть эти метрики в наглядном виде.

Пример дашборда в Grafana
Пустая Grafana – как чистый холст. Вы можете создавать свои панели мониторинга с нуля или воспользоваться готовыми шаблонами. В сообществе Grafana опубликованы сотни дашбордов; их можно импортировать по ID или JSON-файлу. Например, для базового мониторинга Linux отлично подходит дашборд Node Exporter Full – он есть на официальном сайте Grafana с ID 1860. Импортируем его, чтобы не изобретать велосипед:
- В веб-интерфейсе Grafana нажмите значок «+» (Add) и выберите Import (Импортировать дашборд).
- В поле импортирования введите 1860 и нажмите Load. Grafana загрузит шаблон дашборда.
- Укажите имя (можно оставить по умолчанию "Node Exporter Full") и выберите источник данных Prometheus, который мы настроили ранее.
- Нажмите Import – дашборд появится в списке, открывайте!
Должна загрузиться большая панель с множеством графиков: загрузка CPU на ядро, использование памяти, место на файловых системах, нагрузка на сеть и прочее. Готовые дашборды Grafana экономят время и сразу дают ценную информацию. Разумеется, вы можете редактировать виджеты под свои нужды или создать собственный дашборд с нуля, добавляя панели по одной. Главное – данные уже собираются, и они у вас под рукой в Grafana.
Настройка алертов в Prometheus (оповещения о проблемах)
Красивые графики — это отлично, но что, если посреди ночи сервер начнет задыхаться от нагрузки? Постоянно смотреть на монитор никто не будет. Тут на сцену выходят алерты (тревоги). Prometheus умеет по заданным правилам проверять метрики и поднимать тревогу, когда значения выходят за границы. Например, можно настроить сигнал при загрузке CPU > 90% или при критически малом свободном месте на диске.
Механизм алертинга в Prometheus двухкомпонентный: сам Prometheus следит за условиями (через Alerting Rules), а специальный сервис Alertmanager отправляет уведомления туда, куда вам нужно – в почту, Slack, Telegram и т.д. Grafana, к слову, тоже имеет систему Alerting, но классический подход – через связку Prometheus + Alertmanager.
Пример правила алерта (High CPU). Допустим, хотим получать предупреждение, если средняя загрузка CPU на сервере превышает 90% в течение 5 минут. В языке запросов PromQL нет прямой метрики «% CPU», но ее легко вычислить: возьмем 100% и вычтем процент idle-времени процессора. Правило можно описать так (файл правил в формате YAML):
groups:
- name: example_alerts
rules:
- alert: HighCpuUsage
expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Высокая нагрузка CPU на {{ $labels.instance }}"
description: "CPU занято более 90% в течение 5 минут на сервере {{ $labels.instance }}"
Здесь expr – условие на PromQL, for: 5m требует, чтобы условие держалось 5 минут, прежде чем сработать (чтобы отсечь кратковременные пики). При срабатывании алерта Prometheus пометит его как Firing, и Alertmanager сможет отправить уведомление.
Настройка Alertmanager для уведомлений. Чтобы получать оповещения, нужно настроить receivers — получателей и маршруты в Alertmanager. Этот сервис гибко группирует и отправляет алерты. Например, Alertmanager по умолчанию умеет слать уведомления на email, в Slack или PagerDuty. Очень популярен вариант с Telegram: вы создаете бота через BotFather, получаете токен и настраиваете Alertmanager отправлять сообщения боту, добавленному в ваш Telegram-канал или чат. Настройка несложная:
- В файле
alertmanager.ymlдобавьте секцию receivers, например для Telegram или Slack. Укажите необходимые ключи API (токен бота, ID чата или вебхук Slack). - В секции route укажите, какие алерты к какому получателю идут. Можно все отправлять в один канал, а можно разделять по важности.
Приведем краткий пример для отправки в Slack (через webhook URL):
receivers:
- name: 'slack-notifications'
slack_configs:
- api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
channel: '#alerts'
username: 'PrometheusBot'
title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
text: "{{ range .Alerts }}Описание: {{ .Annotations.description }}\nСтатус: {{ .Status }}{{ end }}"
route:
receiver: 'slack-notifications'
По аналогии настраивается Telegram через telegram_configs (нужны bot_token и chat_id). В итоге, когда, скажем, сработает наш HighCpuUsage, Alertmanager мгновенно пришлет сообщение – в почту, мессенджер или и то, и другое. Вы сразу узнаете о проблеме, даже если спите или отдыхаете. Мониторинг превращается в проактивного помощника, который разбудит, если что-то пойдет не так.

Расширение мониторинга на несколько серверов
Что делать, если у вас не один сервер, а целый парк (несколько VPS или сочетание VPS + выделенные серверы)? Prometheus отлично масштабируется под такие задачи. Нужно на каждую машину поставить Node Exporter и указать Prometheus собирать метрики со всех.
Предположим, у вас три сервера с адресами 10.0.1.5, 10.0.1.6 и 10.0.1.7. Вы установили на них Node Exporter (порт 9100). Чтобы мониторинг нескольких серверов заработал, достаточно отредактировать prometheus.yml, добавив их в список целей:
scrape_configs:
- job_name: "node_exporter"
static_configs:
- targets: ["10.0.1.5:9100", "10.0.1.6:9100", "10.0.1.7:9100"]
Вот и всё – добавляем новые цели через запятую, сохраняем и перезагружаем Prometheus. Через пару минут на дашбордах Grafana появятся метрики от всех машин (обратите внимание, что в легендах графиков или при наведении будут разные instance – IP:9100, различающие серверы). Можно группировать панели Grafana по серверам или переключаться между ними, в зависимости от настройки дашборда.
Для десятков серверов поддерживать такой статический список не слишком удобно. В продакшене часто используют автообнаружение: интеграцию Prometheus с сервисами вроде Consul, Kubernetes API или просто периодическое чтение конфигов из файла. Но это уже следующая ступень мастерства. В рамках своих сил ручное перечисление пары адресов – вполне приемлемый способ.

Заключение
Мы проделали большой путь: от голого VPS до полноценной системы мониторинга своими руками. В процессе вы установили Prometheus (сборщик метрик) и Grafana (визуализация), настроили сбор метрик Ubuntu-сервера через Node Exporter, подключили красивые дашборды в Grafana и даже завели первые алерты Prometheus для оперативных уведомлений. Теперь ваш сервер не сможет «приболеть» тайком – все ключевые показатели у вас на экране, а при угрозе вы получите сигнал.
Мониторинг – это не разовая задача, а процесс. Попробуйте расширить систему: добавьте экспортеры для баз данных или веб-серверов, настройте разные уровни оповещений (предупреждение и критическое), интегрируйте уведомления туда, где вам удобнее – хоть в корпоративный Slack, хоть в личный Telegram. Вы убедились, что установка Prometheus и Grafana под силу любому администратору, а выгоды от такого «наблюдательного поста» огромны. Берите эти инструменты и смело применяйте на своих VPS и выделенных серверах – пусть ваша инфраструктура всегда будет под надежным присмотром!