Как данные попадают в Grafana: pull или push метод
Что проверяют
Понимаете ли вы, что Grafana в классической схеме метрики не собирает и не хранит: она показывает то, что лежит в источнике данных. Вопрос pull или push на самом деле про то, как метрики попадают в хранилище. Следом обычно спрашивают, как отдать метрики из Spring Boot и что делать с короткоживущими задачами.
Как отвечать
Разделите цепочку на два звена:
- Grafana и источник: Grafana выполняет запрос к Prometheus, Loki, InfluxDB или PostgreSQL при открытии дашборда и по интервалу обновления, а правила алертинга вычисляет по своему расписанию. Это запрос по требованию, данных у себя она не держит;
- pull в хранилище: Prometheus сам опрашивает сервисы по списку целей с заданным
scrape_interval. В Java это Micrometer сmicrometer-registry-prometheusи Spring Boot Actuator, эндпоинт/actuator/prometheusоткрывают черезmanagement.endpoints.web.exposure.include; - push в хранилище: приложение само отправляет данные. Это InfluxDB, Graphite, OTLP в OpenTelemetry Collector (в Micrometer есть
micrometer-registry-otlp),remote_writeв Mimir или другое совместимое хранилище.
Pull удобен тем, что хранилище знает список целей, метрика up сразу показывает упавший сервис, а частоту сбора контролирует одна сторона. Push нужен, когда до сервиса не достучаться снаружи (NAT, serverless) или процесс живёт меньше интервала опроса. Для батч-задач у Prometheus есть Pushgateway: задача пушит в него, а Prometheus опрашивает уже сам Pushgateway.
Исключение, которое стоит знать: Grafana Live умеет принимать данные push-запросом прямо в Grafana для стриминговых панелей, но это частный случай.
Где спотыкаются
Говорят «Grafana опрашивает сервисы» или «приложение пушит метрики в Grafana». Интервьюер слышит, что кандидат не видит между ними хранилище.
Предлагают Pushgateway для обычных долгоживущих сервисов. Он хранит последнее значение до ручного удаления, пропадает контроль доступности через up, а сам Pushgateway становится единой точкой отказа.
Кладут в метки идентификатор пользователя или URL с параметрами. Каждое уникальное сочетание меток это отдельный временной ряд, и хранилище захлёбывается от кардинальности.