15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
30.10.2024
2 +1

Система мониторинга 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 Хостинге, физической инфраструктуре или контейнерных платформах.

Как работает Prometheus

Prometheus следует чёткой, хорошо определённой архитектуре, построенной вокруг сбора и хранения данных временных рядов. Понимание этой архитектуры необходимо перед развёртыванием в производственной среде.

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

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

Pull-модель является осознанным архитектурным выбором. Она упрощает сетевую безопасность (целевым системам не нужен исходящий доступ к центральному серверу), делает конфигурацию прозрачной и хорошо масштабируется в распределённых средах.

Основные компоненты Prometheus

Prometheus — это модульная экосистема. Каждый компонент выполняет определённую роль:

1. Сервер Prometheus

Центральный движок, отвечающий за опрос целей, хранение метрик в TSDB, оценку правил оповещения, а также обслуживание PromQL API и веб-интерфейса.

2. Exporters

Exporters — это лёгкие агенты или адаптеры, предоставляющие метрики в формате, совместимом с Prometheus. Ключевые exporters включают:

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

3. Alertmanager

Управляет полным жизненным циклом оповещений: получает оповещения от Prometheus, дедуплицирует и группирует их, применяет правила подавления и ингибирования, а также направляет уведомления получателям, таким как Slack, электронная почта, PagerDuty или OpsGenie.

4. PromQL (язык запросов Prometheus)

Специализированный функциональный язык запросов для данных временных рядов. 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, обеспечивая глубокую видимость состояния подов, квот ресурсов, статуса развёртывания и метрик на уровне кластера.

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

Отслеживайте производительность запросов, использование пула соединений, задержку репликации и коэффициент попаданий в кэш для баз данных, таких как 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 разработан для работы в виде одного экземпляра на кластер. Для обеспечения высокой доступности запускают два идентичных сервера Prometheus, опрашивающих одни и те же цели. Alertmanager поддерживает нативную кластеризацию для дедупликации оповещений от нескольких экземпляров Prometheus.

В: Для чего используется PromQL?

PromQL (язык запросов Prometheus) используется для запроса данных временных рядов, хранящихся в Prometheus. Он поддерживает мгновенные запросы, запросы диапазонов, агрегирования, математические операции и функции — обеспечивая всё: от простого поиска метрик до сложных выражений для обнаружения аномалий.

Заключение

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

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

Начните с основ, совершенствуйте дашборды и пороговые значения оповещений по мере изучения нормального поведения вашей системы и постепенно расширяйте охват на каждый уровень стека. Prometheus — это не просто инструмент мониторинга, это краеугольный камень современной инженерии надёжности сайтов.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать