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

Отримати VPS arrow_forward
eco Початковий Туторіал

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

calendar_month Oct 10, 2026 schedule 9 хв. читання visibility 4 переглядів
Prometheus and Grafana Monitoring on Bare Metal
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Для моніторингу приблизно 10 хостів із 15-секундним інтервалом збору даних сервер Prometheus і Grafana на bare-metal потребує щонайменше 4 ядер CPU, 8 ГБ RAM і 160 ГБ NVMe-сховища. У цьому посібнику встановлюються 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 Висновок

Виділений bare-metal сервер забезпечує Prometheus передбачувану продуктивність сховища, а Grafana — надійне середовище для операційних дашбордів. Оберіть bare-metal сервер Valebyte зі сховищем NVMe для безперервних навантажень моніторингу, а потім масштабуйте CPU, RAM і диск у міру зростання кількості цілей і терміну зберігання.

help Часті запитання

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

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.