Как работает 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
Подробно
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 агрегируется.
- Кардинальность меток.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Push: приложения отправляют метрики в Prometheus; counter может уменьшаться, gauge только растёт
- ✓Pull с /metrics; counter только растёт и смотрится через rate(), gauge — текущее значение
- ✗Counter может уменьшаться
- ✗Перцентили из summary можно корректно агрегировать между экземплярами
Связанные вопросы
- Какие три сигнала составляют основу наблюдаемости? Junior
- Команда добавила в метрику задержки метку с идентификатором пользователя, чтобы «удобнее расследовать инциденты». Что произойдёт? Middle
- Почему время ответа измеряют перцентилями, а не средним? Middle
- Как настроить алерты, чтобы дежурные не выгорали, а реальные проблемы не пропускались? Senior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.