15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
30.10.2024
7 +2

Система моніторингу Prometheus: Повний посібник з налаштування для моніторингу інфраструктури та додатків

У міру того як сучасна інфраструктура ускладнюється — охоплюючи мікросервіси, контейнери та розподілені системи — надійний моніторинг перестає бути необов’язковим. Це фундаментальна вимога для підтримки продуктивності, надійності та масштабованості. Prometheus — набір інструментів для моніторингу та сповіщень з відкритим вихідним кодом — став одним із найпоширеніших рішень для збору та візуалізації метрик часових рядів у різноманітних середовищах.

Спочатку розроблений компанією SoundCloud, а тепер — завершений проєкт Cloud Native Computing Foundation (CNCF), Prometheus користується довірою інженерних команд по всьому світу. Цей вичерпний посібник охоплює все, що вам потрібно знати: що таке Prometheus, як він працює, його основні компоненти та повний покроковий процес налаштування — включно з Node Exporter, дашбордами Grafana та конфігурацією сповіщень.

Що таке Prometheus?

Prometheus — це потужна система моніторингу з відкритим вихідним кодом, призначена для збору, зберігання та запиту даних часових рядів — вимірювань або подій, що відстежуються з часом із мітками часу високої роздільної здатності. Вона дозволяє командам візуалізувати стан системи, аналізувати тенденції та ініціювати інтелектуальні сповіщення до того, як дрібні проблеми переростуть у критичні збої.

Ключові можливості Prometheus

МожливістьОпис
Модель даних часових рядівМетрики зберігаються як послідовності з мітками часу, що дозволяє аналізувати тенденції та порівнювати з історичними даними
Моніторинг на основі витягування (Pull)Prometheus активно збирає метрики з цільових кінцевих точок, а не чекає, поки системи надсилатимуть дані
PromQLГнучка та виразна мова запитів для фільтрації, агрегації та аналізу метрик у реальному часі
Інтеграція з AlertmanagerВизначайте правила на основі порогових значень і маршрутизуйте сповіщення на електронну пошту, Slack, PagerDuty та інші канали
Виявлення сервісівАвтоматично виявляє та збирає метрики з цілей у динамічних середовищах, таких як кластери Kubernetes
Багатовимірні даніМітки дозволяють розбивати метрики за такими вимірами, як регіон, екземпляр або назва сервісу

Ці можливості роблять Prometheus ідеальним вибором для команд, що запускають навантаження на VPS Хостингу, bare-metal інфраструктурі або контейнерних платформах.

Як працює Prometheus

Prometheus дотримується чіткої, добре визначеної архітектури, побудованої навколо збору та зберігання даних часових рядів. Розуміння цієї архітектури є необхідним перед розгортанням у виробничому середовищі.

Основний робочий процес

  1. Збір метрик (Scraping): Prometheus періодично надсилає HTTP-запити до налаштованих цільових кінцевих точок — відомих як *exporters* — для збору метрик. Інтервал збору повністю налаштовується.
  1. Зберігання часових рядів: Зібрані метрики зберігаються у вбудованій базі даних часових рядів Prometheus (TSDB). Кожна точка даних містить Unix-мітку часу та набір міток у форматі ключ-значення для ідентифікації.
  1. Запити за допомогою PromQL: Інженери використовують PromQL для запиту збережених метрик, побудови графіків, створення дашбордів або визначення умов сповіщень на основі даних у реальному часі та історичних даних.
  1. Конвеєр сповіщень: Коли метрика перевищує попередньо визначений поріг, Prometheus надсилає сповіщення до Alertmanager, який дедублікує, групує та маршрутизує сповіщення до відповідних каналів.

Модель на основі витягування (pull) є свідомим архітектурним рішенням. Вона спрощує мережеву безпеку (цілям не потрібен вихідний доступ до центрального сервера), робить конфігурацію прозорою та добре масштабується в розподілених середовищах.

Основні компоненти Prometheus

Prometheus — це модульна екосистема. Кожен компонент виконує певну роль:

1. Сервер Prometheus

Центральний рушій, відповідальний за збір метрик з цілей, зберігання метрик у TSDB, оцінку правил сповіщень та обслуговування API PromQL і веб-інтерфейсу.

2. Exporters

Exporters — це легкі агенти або адаптери, що надають метрики у форматі, сумісному з Prometheus. Основні exporters включають:

  • Node Exporter — Збирає метрики апаратного забезпечення та рівня ОС: CPU, пам’ять, дисковий I/O, пропускна здатність мережі, використання файлової системи
  • Blackbox Exporter — Перевіряє зовнішні кінцеві точки через HTTP, HTTPS, DNS, TCP та ICMP на доступність і затримку
  • Exporters для баз даних — Існують спеціалізовані exporters для PostgreSQL, MySQL, Redis, MongoDB та багатьох інших
  • Exporters для конкретних застосунків — Більшість сучасних застосунків і фреймворків нативно надають кінцеву точку /metrics

3. Alertmanager

Керує повним життєвим циклом сповіщень: отримує сповіщення від Prometheus, дедублікує та групує їх, застосовує правила замовчування та інгібіції, а також маршрутизує сповіщення до одержувачів, таких як Slack, електронна пошта, PagerDuty або OpsGenie.

4. PromQL (Prometheus Query Language)

Спеціально розроблена функціональна мова запитів для даних часових рядів. PromQL підтримує миттєві вектори, вектори діапазону, оператори агрегації, математичні функції та підзапити — надаючи глибокі аналітичні можливості для ваших метрик.

5. Pushgateway

Призначений для ефемерних або пакетних завдань, які не можна збирати безпосередньо (наприклад, cron-завдання, що виконується 30 секунд). Ці завдання надсилають свої метрики до Pushgateway, який Prometheus потім збирає у свій регулярний інтервал.

6. Grafana

Хоча Grafana не є частиною самого Prometheus, Grafana — це де-факто рівень візуалізації для даних Prometheus. Вона підключається до Prometheus як джерела даних і дозволяє створювати багаті інтерактивні дашборди з панелями, змінними та анотаціями.

Покрокове налаштування Prometheus на Linux

Наступний посібник проведе вас через повне розгортання Prometheus на Linux-сервері, включно з Node Exporter для системних метрик, Grafana для візуалізації та Alertmanager для сповіщень.

> Передумови: Linux-сервер (Ubuntu 20.04/22.04 або CentOS/RHEL 8+), доступ sudo або root, а також базове знайомство з командним рядком. Якщо вам потрібне надійне серверне середовище, розгляньте AlexHost VPS Хостинг як продуктивну основу з низькою затримкою.

Крок 1: Встановлення Prometheus

Завантажте та розпакуйте останній реліз Prometheus:

wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64

> Порада: Завжди перевіряйте офіційну сторінку релізів Prometheus для отримання останньої стабільної версії перед завантаженням.

Створіть виділеного системного користувача та структуру каталогів:

sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Створіть systemd-сервіс для Prometheus:

sudo nano /etc/systemd/system/prometheus.service

Вставте наступний вміст:

[Unit]
Description=Prometheus Monitoring System
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/ 
  --web.console.templates=/etc/prometheus/consoles 
  --web.console.libraries=/etc/prometheus/console_libraries 
  --storage.tsdb.retention.time=30d

[Install]
WantedBy=multi-user.target

Увімкніть та запустіть Prometheus:

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus

Prometheus тепер буде доступний за адресою http://your-server-ip:9090.

Крок 2: Налаштування Prometheus

Основний файл конфігурації — /etc/prometheus/prometheus.yml. Цей файл визначає глобальні налаштування та цілі збору метрик, які моніторить Prometheus.

Приклад базової конфігурації:

global:
  scrape_interval: 15s        # Default scrape frequency
  evaluation_interval: 15s    # How often alerting rules are evaluated
  scrape_timeout: 10s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - localhost:9093

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

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Після зміни цього файлу завжди перевіряйте конфігурацію перед перезапуском:

promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheus

Крок 3: Встановлення Node Exporter для системних метрик

Node Exporter надає детальні метрики апаратного забезпечення та ОС хост-системи — необхідні для моніторингу навантаження CPU, тиску на пам’ять, використання диска та пропускної здатності мережі.

Завантажте та встановіть Node Exporter:

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Створіть systemd-сервіс для Node Exporter:

sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=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

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

Node Exporter тепер надає метрики за адресою http://your-server-ip:9100/metrics.

Додайте Node Exporter як ціль збору метрик у prometheus.yml:

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

Перезапустіть Prometheus і переконайтеся, що ціль відображається як UP у веб-інтерфейсі Prometheus у розділі Status → Targets.

Крок 4: Візуалізація метрик за допомогою Grafana

Grafana перетворює необроблені метрики Prometheus на дієві, візуально насичені дашборди. Це стандартний рівень візуалізації для розгортань Prometheus.

Встановіть Grafana на Ubuntu/Debian:

sudo apt-get install -y apt-transport-https software-properties-common
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
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

Підключіть Prometheus як джерело даних:

  1. Відкрийте Grafana за адресою http://your-server-ip:3000 (облікові дані за замовчуванням: admin / admin)
  2. Перейдіть до Configuration → Data Sources → Add data source
  3. Виберіть Prometheus
  4. Встановіть URL на http://localhost:9090
  5. Натисніть Save & Test

Імпортуйте готовий дашборд:

  • Перейдіть до Dashboards → Import
  • Введіть ID дашборду 1860 (Node Exporter Full) з маркетплейсу Grafana
  • Виберіть ваше джерело даних Prometheus і натисніть Import

Ви одразу отримаєте комплексний огляд використання CPU, споживання пам’яті, дискового I/O, мережевої статистики та системного навантаження — все в одному інтерактивному дашборді.

Крок 5: Налаштування правил сповіщень та Alertmanager

Сповіщення Prometheus складається з двох частин: правила сповіщень, визначені в Prometheus, та Alertmanager, що керує маршрутизацією та доставкою.

Створіть файл правил сповіщень:

sudo mkdir -p /etc/prometheus/rules
sudo nano /etc/prometheus/rules/system_alerts.yml
groups:
  - name: system_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage has exceeded 80% for more than 5 minutes. Current value: {{ $value }}%"

      - alert: LowDiskSpace
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "Low disk space on {{ $labels.instance }}"
          description: "Available disk space on / is below 15%. Immediate action required."

      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High memory usage on {{ $labels.instance }}"
          description: "Memory usage has exceeded 85% for more than 5 minutes."

      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Instance {{ $labels.instance }} is down"
          description: "Prometheus target {{ $labels.instance }} has been unreachable for more than 1 minute."

Перевірте файл правил:

promtool check rules /etc/prometheus/rules/system_alerts.yml

Встановіть та налаштуйте Alertmanager:

wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz
sudo cp alertmanager-0.26.0.linux-amd64/alertmanager /usr/local/bin/
sudo mkdir /etc/alertmanager

Створіть конфігурацію Alertmanager:

sudo nano /etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'smtp.yourdomain.com:587'
  smtp_from: 'alerts@yourdomain.com'
  smtp_auth_username: 'alerts@yourdomain.com'
  smtp_auth_password: 'your_password'

route:
  group_by: ['alertname', 'instance']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'email-notifications'

receivers:
  - name: 'email-notifications'
    email_configs:
      - to: 'admin@yourdomain.com'
        send_resolved: true

> Примітка: Для професійної доставки електронної пошти у вашому конвеєрі сповіщень розгляньте можливість поєднання Prometheus з AlexHost Email Хостингом для надійної SMTP-інфраструктури.

Розширена конфігурація: виявлення сервісів

У динамічних середовищах — таких як кластери Kubernetes або автомасштабовані серверні парки — статичні списки цілей швидко стають некерованими. Prometheus підтримує кілька механізмів виявлення сервісів з коробки:

scrape_configs:
  - job_name: "kubernetes-pods"
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

Підтримувані бекенди виявлення сервісів включають Kubernetes, Consul, EC2, Azure, GCE, виявлення на основі DNS та виявлення на основі файлів — що робить Prometheus адаптованим до практично будь-якої топології інфраструктури.

Варіанти використання Prometheus

Prometheus відмінно справляється з широким спектром сценаріїв моніторингу:

Моніторинг інфраструктури

Збирайте метрики рівня сервера — CPU, пам’ять, диск, мережа — з кожного вузла у вашому парку. Незалежно від того, чи керуєте ви одним Виділеним сервером або великим кластером, Prometheus забезпечує єдину видимість усіх хостів.

Моніторинг продуктивності застосунків (APM)

Відстежуйте частоту запитів, частоту помилок, затримки відповідей (метод RED) та споживання ресурсів для веб-застосунків і API. Клієнтські бібліотеки Prometheus доступні для Go, Python, Java, Ruby, Node.js та інших мов.

Моніторинг Kubernetes та контейнерів

Prometheus нативно інтегрується з Kubernetes через exporters kube-state-metrics та cAdvisor, забезпечуючи глибоку видимість стану podів, квот ресурсів, статусу розгортань та метрик рівня кластера.

Моніторинг баз даних

Моніторте продуктивність запитів, використання пулу з’єднань, затримку реплікації та коефіцієнт влучань кешу для баз даних, таких як PostgreSQL, MySQL та Redis, за допомогою спеціалізованих exporters.

Власні бізнес-метрики

Інструментуйте власні застосунки для надання специфічних для домену метрик — таких як кількість оброблених замовлень за секунду, активні сесії користувачів або частота платіжних транзакцій — забезпечуючи спостережуваність на бізнес-рівні поряд з технічними метриками.

Моніторинг GPU-навантажень

Для команд, що виконують навантаження машинного навчання або високопродуктивних обчислень, Prometheus може інтегруватися з DCGM exporters для моніторингу використання GPU, пам’яті та температури. Це добре поєднується з AlexHost GPU Хостингом для AI та ML інфраструктури.

Prometheus порівняно з альтернативними рішеннями моніторингу

МожливістьPrometheusNagiosZabbixDatadog
Модель данихЧасові ряди з міткамиНа основі перевірокНа основі елементівЧасові ряди з тегами
Модель зборуPull (+ Pushgateway)Активні/пасивні перевіркиНа основі агентаНа основі агента
Мова запитівPromQLВідсутняВласнаВласна
Нативна підтримка KubernetesТак (першокласна)ОбмеженаОбмеженаТак (платна)
ВартістьБезкоштовно / Відкритий кодБезкоштовно / Відкритий кодБезкоштовно / Відкритий кодКомерційний SaaS
МасштабованістьВисока (з Thanos/Cortex)ПомірнаПомірнаВисока

Найкращі практики для виробничого середовища

Розгортання Prometheus у виробничому середовищі вимагає уваги до кількох операційних аспектів:

  • Зберігання даних: Стандартний період зберігання становить 15 днів. Налаштуйте --storage.tsdb.retention.time відповідно до вашої ємності сховища та вимог відповідності. Для довгострокового зберігання розгляньте Thanos або Cortex.
  • Безпека: Обмежте доступ до веб-інтерфейсу та API Prometheus за допомогою зворотного проксі (Nginx або Caddy) з автентифікацією. Prometheus не включає вбудованої автентифікації.
  • Висока доступність: Запускайте кілька екземплярів Prometheus, що збирають метрики з одних і тих самих цілей, для забезпечення надлишковості. Використовуйте функцію кластеризації Alertmanager для запобігання дублюванню сповіщень.
  • Управління кардинальністю: Уникайте міток з високою кардинальністю (наприклад, ID користувачів, ID запитів) у назвах метрик, оскільки вони можуть спричинити проблеми з пам’яттю та продуктивністю.
  • TLS-шифрування: Увімкніть TLS для кінцевих точок збору метрик та API Prometheus. Поєднайте це з SSL-сертифікатом для захисту всіх комунікацій між компонентами Prometheus.
  • Планування ресурсів: Prometheus є пам’ятоємним. Виділяйте достатньо RAM залежно від кількості активних часових рядів. Загальне правило — приблизно 1–2 байти на зразок у пам’яті.

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

П: У чому різниця між Prometheus та Grafana?

Prometheus — це бекенд моніторингу та сповіщень, який збирає, зберігає та запитує метрики. Grafana — це фронтенд візуалізації, що підключається до Prometheus (та інших джерел даних) для відображення дашбордів. Це взаємодоповнюючі інструменти, а не альтернативи.

П: Чи може Prometheus моніторити Windows-сервери?

Так. Windows Exporter (раніше WMI Exporter) надає системні метрики Windows у форматі, сумісному з Prometheus, охоплюючи CPU, пам’ять, диск, мережу, IIS та інше.

П: Як Prometheus забезпечує високу доступність?

Prometheus сам по собі розроблений для роботи як єдиний екземпляр на кластер. Для HA ви запускаєте два ідентичних сервери Prometheus, що збирають метрики з одних і тих самих цілей. Alertmanager підтримує нативну кластеризацію для дедублікації сповіщень від кількох екземплярів Prometheus.

П: Для чого використовується PromQL?

PromQL (Prometheus Query Language) використовується для запиту даних часових рядів, збережених у Prometheus. Вона підтримує миттєві запити, запити діапазону, агрегації, математичні операції та функції — забезпечуючи все від простого пошуку метрик до складних виразів виявлення аномалій.

Висновок

Prometheus — це перевірене в бою, виробничого рівня рішення для моніторингу, що забезпечує глибоку видимість у реальному часі стану та продуктивності всього стека вашої інфраструктури. Його архітектура на основі витягування, багатовимірна модель даних, потужна мова запитів PromQL та безшовна інтеграція з такими інструментами, як Grafana та Alertmanager, роблять його золотим стандартом сучасної спостережуваності.

Незалежно від того, чи моніторите ви один Linux-сервер, парк Виділених серверів, кластер Kubernetes або складний застосунок на мікросервісах, Prometheus масштабується відповідно до ваших потреб. Дотримуючись кроків у цьому посібнику — встановлення Prometheus, розгортання Node Exporter, налаштування дашбордів Grafana та створення інтелектуальних правил сповіщень — ви отримаєте надійну основу моніторингу, яка допоможе вам виявляти аномалії на ранніх стадіях, швидше реагувати на інциденти та постійно підвищувати надійність системи.

Починайте з основ, вдосконалюйте дашборди та порогові значення сповіщень у міру вивчення нормальної поведінки вашої системи та поступово розширюйте охоплення на кожен рівень вашого стека. Prometheus — це не просто інструмент моніторингу, це наріжний камінь сучасної інженерії надійності сайтів.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати