Что такое Prometheus?

«Что такое Prometheus?» — вопрос из категории Мониторинг и логирование, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Prometheus — это open-source система мониторинга и алертинга, построенная на основе pull-модели (сама опрашивает цели) и хранения данных в виде временных рядов (time series) с ключ-значение метками (labels). Это стандарт де-факто для мониторинга динамических сред, таких как Kubernetes.

Ключевые компоненты, которые я настраивал:

  • Prometheus Server: Основной компонент, который собирает и хранит метрики, выполняет запросы PromQL.
  • Экспортеры (Exporters): Агенты, которые преобразуют метрики сторонних систем в формат Prometheus. Например:
    • node_exporter — метрики хоста (CPU, память, диск).
    • blackbox_exporter — проверки доступности по HTTP, TCP, ICMP.
    • kube-state-metrics — метрики о состоянии объектов Kubernetes.
  • Alertmanager: Отдельный сервис для обработки, группировки и отправки алертов (в Slack, Email, PagerDuty).
  • Client Libraries: Для инструментирования собственного кода (например, на Go, Python, Java).

Пример PromQL-запроса для мониторинга в Kubernetes:

# Средняя загрузка CPU по всем подам приложения за 5 минут
rate(container_cpu_usage_seconds_total{container="myapp"}[5m])

# Доступная память на нодах в процентах
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

Конфигурация из практики (scrape config):

scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      # Берем метрики только с подов, у которых есть аннотация prometheus.io/scrape: "true"
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)

В нашем стеке Prometheus интегрирован с Grafana для дашбордов и с VictoriaMetrics для долгосрочного хранения метрик.