Получить доступ

Как работает Prometheus и какие типы метрик в нём есть?

MiddleМониторинг и логиPrometheus
Ещё спрашивают так:
  • Чем pull-модель отличается от push?
  • Чем counter отличается от gauge и histogram?
Коротко

Prometheus сам опрашивает (pull) эндпоинты /metrics целей, найденных через service discovery, и хранит временные ряды. Типы: counter — только растёт (запросы, ошибки), смотрят скорость через rate(); gauge — текущее значение (память, длина очереди); histogram — распределение по корзинам, перцентили считаются на сервере через histogram_quantile и агрегируются между экземплярами; summary — перцентили на клиенте, агрегировать нельзя.

  • Высокая кардинальность меток (user_id, URL с идентификаторами) убивает Prometheus
  • Pull: видно, что цель недоступна (up == 0); для коротких задач — Pushgateway
  • Хранение долгое и HA — Thanos, VictoriaMetrics, Mimir

А ещё Метод RED для сервисов: Rate, Errors, Duration

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Pull против push. При pull Prometheus контролирует частоту и сразу видит пропавшую цель. Push удобнее для коротких задач и сетей, куда Prometheus не дотянется; там используют Pushgateway или агент, пересылающий данные (remote write).

Кардинальность. Каждое уникальное сочетание меток — отдельный ряд. Метка user_id с миллионом значений даёт миллион рядов на метрику: память и диск растут, запросы тормозят. Такие данные — в логах и трейсах.

Histogram против summary. Перцентили нельзя усреднять: среднее p99 десяти подов — не p99 сервиса. Histogram хранит счётчики по корзинам, их можно сложить и посчитать перцентиль общего распределения; точность зависит от границ корзин. Нативные гистограммы Prometheus снимают проблему подбора границ.

Экосистема: exporters (node_exporter, postgres_exporter), Alertmanager для алертов, Grafana для дашбордов.

Пример

# запросов в секунду по сервису
sum by (service) (rate(http_requests_total[5m]))

# доля ошибок 5xx
sum(rate(http_requests_total{status=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

# p99 задержки по всем экземплярам
histogram_quantile(0.99,
  sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

Что хотят услышать

  • Pull-модель и service discovery.
  • Четыре типа метрик и почему histogram агрегируется.
  • Кардинальность меток.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем