Встречается на 33% собеседований по DevOps

Что такое Prometheus

Prometheus — это открытая система мониторинга и оповещения, которая собирает метрики с серверов, контейнеров и приложений в режиме реального времени. Она была создана в SoundCloud в 2012 году и стала частью Cloud Native Computing Foundation, что подтверждает её популярность в индустрии. Prometheus использует pull-модель сбора данных, мощный язык запросов PromQL и встроенные механизмы алертинга, что делает его стандартом де-факто для мониторинга в Kubernetes и облачных средах.

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

Prometheus периодически опрашивает целевые объекты (targets) по HTTP, получая от них метрики. Каждая метрика хранится как временной ряд, идентифицируемый именем и набором меток (labels) — пар ключ-значение, которые позволяют фильтровать и агрегировать данные. Например, метрика http_requests_total может иметь метки method="GET", status="200", instance="10.0.0.1:8080".

Цели мониторинга задаются в конфигурационном файле prometheus.yml либо обнаруживаются автоматически через механизмы сервис-дискавери (например, для Kubernetes). Prometheus хранит данные локально на диске в эффективном формате временных рядов, поддерживая также интеграцию с внешними хранилищами для долгосрочного хранения.

Язык запросов PromQL

PromQL — это функциональный язык запросов, позволяющий выбирать и агрегировать временные ряды. Примеры типичных запросов:

promql
# Средняя загрузка CPU за 5 минут по всем инстансам
avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))

# Количество HTTP-запросов со статусом 500 за последний час
sum(rate(http_requests_total{status="500"}[1h]))

PromQL поддерживает операции сравнения, математические функции, агрегации (sum, avg, min, max) и функции для работы с временными окнами (rate, increase, histogram_quantile).

Алертинг и интеграции

Prometheus включает компонент Alertmanager, который обрабатывает алерты, создаваемые правилами в Prometheus. Правила задаются в конфигурации и могут отправлять уведомления в Slack, Email, PagerDuty и другие системы. Пример правила:

yaml
# prometheus.yml
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["alertmanager:9093"]

rule_files:
  - "alerts.yml"
yaml
# alerts.yml
groups:
  - name: example
    rules:
      - alert: HighCPUUsage
        expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.2
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "CPU usage is high"

Подводные камни и ограничения

  • Pull-модель: Prometheus сам опрашивает цели, поэтому для сбора метрик с приложений требуется, чтобы они были доступны по сети и отдавали метрики в формате Prometheus. Для приложений, которые не поддерживают этот формат, используются экспортеры (например, node_exporter для системных метрик).
  • Хранение: Локальное хранение по умолчанию ограничено по времени и объёму. Для долгосрочного хранения требуется интеграция с внешними системами, такими как Thanos или Cortex.
  • Высокая доступность: Prometheus не поддерживает кластеризацию из коробки. Для отказоустойчивости запускают несколько идентичных экземпляров, но это не даёт глобальной консистентности данных.
  • Масштабируемость: При большом количестве целей и метрик может потребоваться шардирование и федерация.

Когда использовать

Prometheus идеально подходит для мониторинга микросервисных архитектур, особенно в Kubernetes, где он собирает метрики со всех узлов, подов и контейнеров. Он также эффективен для мониторинга инфраструктуры (CPU, память, диск) и приложений, которые предоставляют метрики в формате Prometheus. Однако для мониторинга событий, логов или трассировок он не предназначен — для этого используют другие инструменты (например, ELK, Jaeger).

Коротко

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