Prometheus (База данных временных рядов)

⌘K

Prometheus (База данных временных рядов)

Prometheus — это система мониторинга и сбора метрик с временными метками (time series), разработанная для высокой надёжности, гибкости и интеграции с современными распределёнными системами. Она активно используется в DevOps, SRE и облачной инженерии как ключевой компонент для наблюдаемости (observability).

Prometheus имеет встроенную time-series базу данных, собственный язык запросов — PromQL (Prometheus Query Language) — и механизм генерации алертов. Он способен собирать метрики из тысяч источников: от серверов и контейнеров до приложений, экспортёров и облачных API.


📦 Ключевые компоненты Prometheus:

  • Time Series DB — собственное хранилище данных, оптимизированное под временные метки;
  • PromQL — мощный язык запросов, позволяющий аггрегировать, фильтровать и вычислять значения на лету;
  • Alertmanager — отдельный компонент, управляющий отправкой уведомлений по заданным правилам;
  • Exporters — плагины/агенты, собирающие метрики из внешних систем (Node Exporter, Blackbox Exporter, PostgreSQL Exporter и др.);
  • Service Discovery — автоматическое обнаружение сервисов в Kubernetes, EC2, Consul и других источниках.

🔍 Что можно мониторить:

  • Загрузка CPU, использование памяти, сетевой трафик;
  • Время ответа сервисов, ошибки, задержки, таймауты;
  • Пользовательские метрики из приложений (через HTTP endpoint /metrics);
  • Kubernetes-кластеры: поды, ноды, ingress, контейнеры;
  • Системные компоненты CI/CD, баз данных, брокеров сообщений и др.

🔗 Интеграция с Grafana:

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


⚙️ Почему Prometheus стал стандартом:

  • 📈 Высокая точность и детализация данных;
  • ⚙️ Простота развертывания (один бинарник);
  • 🔄 Интеграция с Kubernetes “из коробки”;
  • 🧩 Open Source — развитая экосистема, поддержка сообществом;
  • 📡 Pushgateway и federation — поддержка гибкой архитектуры сбора метрик в разных слоях системы.

Prometheus идеально подходит для микросервисов, event-driven-систем и облачной инфраструктуры, где важно быстро обнаруживать деградацию или сбои. Благодаря своей расширяемости и отказоустойчивости он стал основой мониторинга во многих крупных компаниях и open-source-решениях.


⚙️ Пример конфигурации Prometheus (prometheus.yml)

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['192.168.1.100:9100']

  - job_name: 'my-app'
    metrics_path: /metrics
    static_configs:
      - targets: ['my-app.default.svc.cluster.local:8080']

🔍 Что делает этот файл:

  • Устанавливает глобальный интервал опроса — 15 секунд;
  • Мониторит Node Exporter по IP (сбор системных метрик);
  • Сканирует HTTP endpoint /metrics у пользовательского приложения (например, Go, Python, Java).

🔎 Примеры PromQL-запросов

📊 Использование CPU по ядрам (в процентах):

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

📈 Память, доступная на ноде:

node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100

🔥 Количество HTTP 5xx-ошибок за 5 минут:

sum(rate(http_requests_total{status=~"5.."}[5m]))

⏱ Среднее время ответа приложения:

rate(http_request_duration_seconds_sum[1m]) / rate(http_request_duration_seconds_count[1m])

💡 Практика: что делать дальше

  1. Развернуть Prometheus и Node Exporter (можно через Helm: helm install prometheus prometheus-community/prometheus);
  2. Настроить prometheus.yml — указать источники метрик;
  3. Подключить Grafana и выбрать Prometheus как data source;
  4. Создать дашборды или использовать готовые (например, Node Exporter Full).

🚨 Пример alert-правил (alertrules.yaml)

groups:
  - name: node-alerts
    rules:
      - alert: HighCPUUsage
        expr: avg by(instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.85
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Высокая загрузка CPU на {{ $labels.instance }}"
          description: "CPU usage > 85% в течение 2 минут."

      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Экземпляр {{ $labels.instance }} недоступен"
          description: "Инстанс не отвечает на опросы Prometheus более 1 минуты."

📌 Эти правила:

  • Сигнализируют о высоком CPU (выше 85%);
  • Отслеживают недоступность узла;
  • Отправляют метаданные (summary, description) в Alertmanager.

Подключается в prometheus.yml:

rule_files:
  - "alertrules.yaml"

📊 Сравнение систем мониторинга

ХарактеристикаPrometheusGrafana LokiZabbixDatadog
Тип данныхМетрики (time series)ЛогиМетрики, логи, триггерыМетрики, логи, трассировки
Язык запросовPromQLLogQLНативные выраженияПроприетарный
ХранениеВстроенная TSDBВстроенное (BoltDB+chunks)СУБД (MySQL/PostgreSQL)Облако
ИнтерфейсВеб UI + GrafanaЧерез GrafanaВеб UIВеб-интерфейс
AlertingЧерез AlertmanagerЧерез Prometheus/AlertmanagerВстроенныйВстроенный
Поддержка KubernetesОтличная (SD + exporters + Helm)Отличная (через fluent-bit, promtail)ОграниченнаяОтличная (через агенты + интеграции)
Модель лицензированияOpen Source (Apache 2.0)Open SourceOpen Source / EnterpriseSaaS (платно)
УстановкаПростой (один бинарник / Helm)Быстрая (Helm или binary)Более сложнаяБез установки (облачный агент)
Кейс: локальный кластер✅ Полный контроль✅ Для логов✅ Но требует настройки СУБД⚠️ Ограничено
Кейс: enterprise-cloud✅ Через Thanos, Cortex✅ В связке с Prometheus⚠️ Меньше гибкости✅ Сильная поддержка