bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Мониторинг Prometheus и Grafana на физическом сервере

calendar_month Oct 10, 2026 schedule 9 мин. чтения visibility 1 просмотров
Prometheus and Grafana Monitoring on Bare Metal
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Сервер Prometheus и Grafana на «голом железе» требует как минимум 4 ядра CPU, 8 ГБ RAM и 160 ГБ NVMe-хранилища для мониторинга примерно 10 хостов с интервалом сбора метрик 15 секунд. В этом руководстве устанавливаются Prometheus, Node Exporter, Grafana, Alertmanager, Nginx и TLS на Ubuntu Server 24.04.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Архитектура мониторинга bare-metal с Prometheus и Grafana

Prometheus собирает числовые метрики временных рядов, выполняя запросы к HTTP-эндпоинтам, обычно каждые 15–60 секунд. Grafana запрашивает Prometheus и преобразует эти метрики в дашборды, графики, таблицы и оповещения. Node Exporter предоставляет метрики Linux-хоста, такие как загрузка CPU, нагрузка на память, дисковое пространство, операции ввода-вывода файловой системы, средняя нагрузка и пропускная способность сети.

Для мониторинга в production-среде запускайте Prometheus и Grafana на выделенном bare-metal-сервере, если мониторинг критичен для бизнеса, срок хранения превышает 30 дней или вы планируете отслеживать более 100 систем. VPS подходит для небольшой лаборатории, нескольких веб-сайтов или менее 20 малонагруженных целей. Bare metal обеспечивает предсказуемую производительность дискового ввода-вывода и предотвращает проблемы «шумных соседей» во время компактизации Prometheus.

В этой конфигурации используется один сервер мониторинга и несколько отслеживаемых Linux-серверов:

  • Prometheus: хранит метрики и проверяет правила оповещений на порту 9090.
  • Node Exporter: предоставляет метрики хоста на порту 9100.
  • Grafana: предоставляет дашборды на порту 3000 через Nginx.
  • Alertmanager: группирует и маршрутизирует оповещения на порту 9093.
  • Nginx: безопасно публикует Grafana через HTTPS.

Предварительные требования и подбор конфигурации сервера

Используйте чистую установку Ubuntu Server 24.04 LTS со статическим публичным IP-адресом. Приведённые ниже команды требуют наличия пользователя без прав root с доступом через sudo. Открывайте TCP-порты 22, 80 и 443 для интернета только при необходимости. По возможности держите порты Prometheus 9090, Alertmanager 9093 и Node Exporter 9100 закрытыми для внешнего доступа.

  • Операционная система: Ubuntu Server 24.04 LTS x86_64
  • Минимальная конфигурация сервера мониторинга: 4 ядра CPU, 8 ГБ ОЗУ, NVMe SSD 160 ГБ
  • Рекомендуемая production-конфигурация сервера: 8 ядер CPU, 32 ГБ ОЗУ, NVMe SSD 960 ГБ
  • Используемый интервал сбора метрик: 15 секунд
  • Используемый срок хранения Prometheus: 30 дней
  • Требуемая DNS-запись: запись A или AAAA, например grafana.example.com

Для большинства развёртываний Prometheus дисковая ёмкость является ограничивающим ресурсом. Интервал сбора 15 секунд создаёт 5 760 образцов каждой метрики в день. Метрики с низкой кардинальностью, такие как статистика CPU, памяти и диска, требуют немного ресурсов; метки, содержащие идентификаторы пользователей, идентификаторы запросов, IP-адреса, хеши контейнеров или URL с динамическими путями, могут быстро расходовать дисковое пространство и память.

Подбор конфигурации в production-среде по количеству отслеживаемых хостов

Для хранения данных в течение 30 дней, интервала сбора 15 секунд и стандартных метрик Node Exporter используйте следующую конфигурацию сервера мониторинга.

Итог: Начните с 8 ядер CPU, 32 ГБ ОЗУ и NVMe-диска 960 ГБ примерно для 100 Linux-серверов; прежде чем сокращать срок хранения, увеличьте дисковую ёмкость.

Отслеживаемые Linux-хостыvCPU / ядра CPUОЗУДискЕжемесячный трафик
1–20 хостов4 ядра8 ГБNVMe 160 ГБ1 ТБ
21–150 хостов8 ядер32 ГБNVMe 960 ГБ3 ТБ
151–500 хостов16 ядер64 ГБ2 × NVMe 1,92 ТБ в RAID 18 ТБ

Эти значения рассчитаны для метрик операционной системы и умеренного количества метрик приложений. Добавьте ресурсы для метрик MySQL, PostgreSQL, Redis, почтового сервера, игрового сервера, Kubernetes, CI/CD, потоковой передачи данных или blackbox-проверок. Для более чем 500 хостов, хранения данных в течение нескольких лет или телеметрии приложений с высокой кардинальностью используйте федерацию Prometheus или платформу долгосрочного хранения метрик, например Thanos, Mimir или VictoriaMetrics.

Шаг 1: Подготовка bare-metal-сервера

Обновите пакеты, установите часовой пояс, установите необходимые утилиты и включите простой межсетевой экран. При необходимости замените UTC на предпочитаемый часовой пояс.

sudo apt update && sudo apt -y upgrade
sudo timedatectl set-timezone UTC
sudo apt install -y curl wget tar gnupg2 ca-certificates apt-transport-https nginx ufw
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

Создайте выделенный каталог для данных Prometheus. Предпочтительно использовать NVMe-накопитель, поскольку Prometheus постоянно записывает журнал предварительной записи и периодически выполняет компактизацию блоков временных рядов.

sudo mkdir -p /var/lib/prometheus
sudo mkdir -p /etc/prometheus/rules
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus /etc/prometheus
Быстрый выбор
Нужен выделенный сервер?
Bare metal с NVMe в 70+ локациях — настройка и заказ за пару минут.
К серверам

Шаг 2: Установка Prometheus

Загрузите Prometheus 2.53.4 для Linux AMD64, установите его бинарные файлы и создайте службу systemd. Перед последующими обновлениями подтвердите версию выпуска на странице релизов Prometheus на GitHub; выполняйте смену версии осознанно и только после тестирования.

cd /tmp
PROM_VERSION=2.53.4
wget https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-amd64.tar.gz
tar -xzf prometheus-${PROM_VERSION}.linux-amd64.tar.gz
sudo install -m 0755 prometheus-${PROM_VERSION}.linux-amd64/prometheus /usr/local/bin/prometheus
sudo install -m 0755 prometheus-${PROM_VERSION}.linux-amd64/promtool /usr/local/bin/promtool
sudo cp -r prometheus-${PROM_VERSION}.linux-amd64/consoles /etc/prometheus/
sudo cp -r prometheus-${PROM_VERSION}.linux-amd64/console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus

Создайте файл /etc/prometheus/prometheus.yml. Замените 10.20.0.11 и 10.20.0.12 на частные IP-адреса отслеживаемых хостов. Частные сетевые адреса позволяют не выставлять Node Exporter в публичный интернет.

sudo tee /etc/prometheus/prometheus.yml > /dev/null <<'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    environment: production
    site: bare-metal-1

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['127.0.0.1:9093']

rule_files:
  - /etc/prometheus/rules/*.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['127.0.0.1:9090']

  - job_name: node
    static_configs:
      - targets:
          - '127.0.0.1:9100'
          - '10.20.0.11:9100'
          - '10.20.0.12:9100'
EOF
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Создайте и запустите модуль systemd Prometheus со сроком хранения 30 дней. Параметр --storage.tsdb.retention.time=30d ограничивает срок хранения блоков; также используйте ограничение размера, чтобы данные мониторинга не заполнили том сервера.

sudo tee /etc/systemd/system/prometheus.service > /dev/null <<'EOF'
[Unit]
Description=Prometheus Monitoring
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 \
  --storage.tsdb.retention.time=30d \
  --storage.tsdb.retention.size=120GB \
  --web.listen-address=127.0.0.1:9090
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus --no-pager

Шаг 3: Установка Node Exporter на каждом отслеживаемом Linux-сервере

Выполните этот раздел на сервере Prometheus и на каждой целевой машине. Node Exporter прослушивает порт 9100. Привяжите его к частному IP-адресу или используйте правила межсетевого экрана, чтобы подключаться к нему мог только сервер Prometheus.

cd /tmp
NODE_VERSION=1.8.2
sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_VERSION}/node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
tar -xzf node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
sudo install -m 0755 node_exporter-${NODE_VERSION}.linux-amd64/node_exporter /usr/local/bin/node_exporter
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<'EOF'
[Unit]
Description=Prometheus 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 --web.listen-address=:9100
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl -s http://127.0.0.1:9100/metrics | head

На каждом отслеживаемом хосте разрешите доступ к порту 9100 только с частного адреса сервера Prometheus. Замените 10.20.0.10 адресом сервера мониторинга.

sudo ufw allow from 10.20.0.10 to any port 9100 proto tcp
sudo ufw status numbered

Шаг 4: Добавление правил оповещений и Alertmanager

Создайте оповещения для недоступного хоста, длительной высокой загрузки CPU, нехватки дискового пространства и малого объёма доступной памяти. Оповещения должны указывать на требующее действий состояние, а не на каждый кратковременный всплеск.

sudo tee /etc/prometheus/rules/host-alerts.yml > /dev/null <<'EOF'
groups:
  - name: host-alerts
    rules:
      - alert: HostDown
        expr: up{job="node"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Host {{ $labels.instance }} is unreachable"
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "CPU usage exceeds 90% on {{ $labels.instance }}"
      - alert: LowDiskSpace
        expr: (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) * 100 < 10
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "Less than 10% disk space remains on {{ $labels.instance }}"
      - alert: LowAvailableMemory
        expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Available memory is below 10% on {{ $labels.instance }}"
EOF
sudo chown prometheus:prometheus /etc/prometheus/rules/host-alerts.yml
sudo promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheus

Установите Alertmanager и начните с локального получателя. После проверки доставки оповещений замените конфигурацию получателя на правильно защищённый SMTP-релей, webhook, совместимый со Slack эндпоинт или интеграцию с PagerDuty.

cd /tmp
ALERT_VERSION=0.27.0
wget https://github.com/prometheus/alertmanager/releases/download/v${ALERT_VERSION}/alertmanager-${ALERT_VERSION}.linux-amd64.tar.gz
tar -xzf alertmanager-${ALERT_VERSION}.linux-amd64.tar.gz
sudo useradd --no-create-home --shell /usr/sbin/nologin alertmanager
sudo install -m 0755 alertmanager-${ALERT_VERSION}.linux-amd64/alertmanager /usr/local/bin/alertmanager
sudo mkdir -p /etc/alertmanager /var/lib/alertmanager
sudo chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/alertmanager
sudo tee /etc/alertmanager/alertmanager.yml > /dev/null <<'EOF'
route:
  receiver: local-log
  group_by: ['alertname', 'instance']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
receivers:
  - name: local-log
EOF
sudo tee /etc/systemd/system/alertmanager.service > /dev/null <<'EOF'
[Unit]
Description=Prometheus Alertmanager
After=network-online.target
[Service]
User=alertmanager
Group=alertmanager
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/var/lib/alertmanager --web.listen-address=127.0.0.1:9093
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now alertmanager
Быстрый выбор
Нужен выделенный сервер?
Bare metal с NVMe в 70+ локациях — настройка и заказ за пару минут.
К серверам

Шаг 5: Установка Grafana

Установите Grafana из подписанного APT-репозитория. Grafana будет прослушивать только localhost, поскольку Nginx будет обрабатывать публичный доступ по HTTPS.

sudo mkdir -p /etc/apt/keyrings
wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo sed -i 's/^;http_addr =.*/http_addr = 127.0.0.1/' /etc/grafana/grafana.ini
sudo systemctl enable --now grafana-server
sudo systemctl status grafana-server --no-pager

Для первоначального входа используйте локальную службу через SSH-туннель, а не открывайте порт 3000:

ssh -L 3000:127.0.0.1:3000 youruser@YOUR_SERVER_IP

Откройте http://localhost:3000, войдите с учётными данными admin и admin и немедленно смените пароль. Добавьте источник данных Prometheus с URL http://127.0.0.1:9090. Импортируйте дашборд с ID 1860 — широко используемый дашборд Node Exporter Full, — затем выберите источник данных Prometheus.

Шаг 6: Публикация Grafana через Nginx и HTTPS

Настройте DNS для grafana.example.com, указав этот сервер, прежде чем запрашивать сертификат. Замените домен в конфигурации и команде Certbot.

sudo tee /etc/nginx/sites-available/grafana > /dev/null <<'EOF'
server {
    listen 80;
    server_name grafana.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/grafana
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d grafana.example.com --redirect --agree-tos -m [email protected]
sudo systemctl status certbot.timer --no-pager

Создайте отдельных пользователей Grafana или подключите провайдера удостоверений; не используйте общую учётную запись администратора по умолчанию. Отключите анонимный доступ, если дашборды намеренно не являются публичными.

Шаг 7: Проверка сбора данных, хранения и оповещений

Убедитесь, что Prometheus видит каждую цель как работоспособную. Статус цели up, равный 1, означает успех; значение 0 означает, что Prometheus не может получить данные с эндпоинта.

curl -s http://127.0.0.1:9090/api/v1/query?query=up
curl -s http://127.0.0.1:9090/api/v1/targets | grep -o 'health":"[^"]*' | sort | uniq -c
sudo promtool check rules /etc/prometheus/rules/host-alerts.yml
sudo systemctl --no-pager --full status prometheus node_exporter alertmanager grafana-server nginx

В Grafana Explore выполните следующие запросы PromQL:

up{job="node"}
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
node_memory_MemAvailable_bytes / 1024 / 1024
node_filesystem_avail_bytes{mountpoint="/"} / 1024 / 1024 / 1024

Безопасно протестируйте оповещение HostDown, остановив Node Exporter на одном некритичном хосте более чем на две минуты, а затем восстановите его.

sudo systemctl stop node_exporter
# Подождите не менее 2 минут, проверьте раздел Alerts в Prometheus, затем восстановите службу:
sudo systemctl start node_exporter
Быстрый выбор
Нужен выделенный сервер?
Bare metal с NVMe в 70+ локациях — настройка и заказ за пару минут.
К серверам

Устранение распространённых проблем Prometheus и Grafana

Цель отображается как DOWN в Prometheus

Проверьте службу цели, межсетевой экран и маршрут от сервера Prometheus. Следующая команда должна вернуть метрики с сервера мониторинга. Если истекает время ожидания, разрешите TCP-порт 9100 только с частного IP-адреса Prometheus и проверьте правильность адреса цели в prometheus.yml.

curl -v http://10.20.0.11:9100/metrics
sudo systemctl status node_exporter --no-pager
sudo ss -lntp | grep 9100

Prometheus потребляет слишком много дискового пространства или ОЗУ

Проверьте активные ряды, занятое дисковое пространство и настройки хранения. Избегайте меток с неограниченным количеством значений. Сократить срок хранения с 30 до 15 дней безопаснее, чем допустить заполнение файловой системы, однако для стабильной нагрузки следует увеличить ёмкость NVMe.

curl -s http://127.0.0.1:9090/api/v1/status/tsdb
sudo du -sh /var/lib/prometheus
sudo df -h /var/lib/prometheus
sudo journalctl -u prometheus -n 100 --no-pager

Grafana возвращает ошибку 502 Bad Gateway

Ответ 502 обычно означает, что Grafana остановлена, прослушивает другой адрес или заблокирована ошибкой конфигурации. Проверьте обе службы и проверьте конфигурацию Nginx перед его перезагрузкой.

sudo systemctl status grafana-server nginx --no-pager
sudo ss -lntp | grep 3000
sudo nginx -t
sudo journalctl -u grafana-server -n 100 --no-pager

В Grafana нет данных

Убедитесь, что URL источника данных Grafana — http://127.0.0.1:9090, а не публичный URL, заблокированный межсетевым экраном. Сначала выполните в Prometheus запрос up. Если ряды не возвращаются, исправьте сбор данных Prometheus, прежде чем изменять переменные дашборда.

Эксплуатационные рекомендации для надёжного сервера мониторинга

  • Ежедневно создавайте резервные копии дашбордов Grafana, источников данных, правил оповещений и конфигурационных файлов. Данные Prometheus можно воссоздать, но исторические метрики ценны при разборе инцидентов.
  • Отслеживайте сам сервер мониторинга с помощью Node Exporter, включая использование диска, память, CPU и состояние RAID.
  • Используйте диски NVMe в RAID 1 для важных production-данных мониторинга. RAID не является резервной копией.
  • Устанавливайте исправления Ubuntu и обновляйте Prometheus, Grafana, Node Exporter и Alertmanager в запланированное окно технического обслуживания.
  • Используйте частные VLAN, VPN-доступ или списки разрешённых адресов межсетевого экрана для портов метрик. Не публикуйте Node Exporter или эндпоинты Prometheus в интернете.
  • Настройте оповещения об истечении срока действия сертификатов, сбоях резервного копирования, деградации RAID и росте объёма хранилища TSDB Prometheus.

table_chart VPS versus bare metal for Prometheus and Grafana

Option vCPU RAM Storage Best for
VPS monitoring node 4 vCPU 8 GB 160 GB NVMe 1-20 Linux hosts, 30-day retention, standard Node Exporter metrics
Bare-metal monitoring server 8 CPU cores 32 GB 960 GB NVMe 21-150 Linux hosts, 30-day retention, dashboards and alerting
High-capacity bare metal 16 CPU cores 64 GB 2 × 1.92 TB NVMe RAID 1 151-500 Linux hosts, sustained ingestion, longer retention requirements

check_circle Заключение

Выделенный выделенный сервер предоставляет Prometheus предсказуемую производительность хранилища, а Grafana — надежную платформу для операционных панелей мониторинга. Выберите выделенный сервер Valebyte с NVMe-накопителем для стабильных нагрузок мониторинга, а затем увеличивайте объем CPU, ОЗУ и диска по мере роста количества целей и срока хранения данных.

help Часто задаваемые вопросы

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Prometheus и Grafana для физических серверов Настройка сервера мониторинга Prometheus Установка Grafana на сервер Ubuntu Мониторинг с помощью Node Exporter Мониторинг физических серверов
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.