Какой стек технологий использовался для сбора и визуализации метрик в вашем последнем проекте?

«Какой стек технологий использовался для сбора и визуализации метрик в вашем последнем проекте?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В последнем проекте на Spring Boot использовался стек Micrometer → Prometheus → Grafana.

1. Micrometer (инструментация приложения) Библиотека-фасад для сбора метрик JVM-приложений. Интегрируется через spring-boot-starter-actuator и зависимость micrometer-registry-prometheus.

Пример объявления кастомной метрики:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

@RestController
public class OrderController {
    private final Counter createdOrdersCounter;

    public OrderController(MeterRegistry registry) {
        // Создаём счётчик с именем и тегами для детализации
        this.createdOrdersCounter = Counter
            .builder("orders.created.total")
            .description("Total number of created orders")
            .tag("service", "order-service")
            .register(registry);
    }

    @PostMapping("/orders")
    public ResponseEntity createOrder() {
        // Инкрементируем метрику при событии
        createdOrdersCounter.increment();
        // ... логика создания заказа
        return ResponseEntity.ok().build();
    }
}

2. Prometheus (сбор и хранение метрик)

  • Prometheus периодически «скрапил» (забирал) метрики с эндпоинта /actuator/prometheus.
  • Хранил данные в своём временном рядовом хранилище.
  • Позволял писать запросы (PromQL) для агрегации данных.

3. Grafana (визуализация и дашборды)

  • Подключалась к Prometheus как источнику данных.
  • На дашбордах отображались графики по JVM-метрикам (память, потоки), HTTP-запросам, времени ответа и бизнес-метрикам (как в примере выше).

Ключевые преимущества такого стека: стандартизация формата метрик (Micrometer), мощный язык запросов (PromQL) и гибкая визуализация (Grafana).