Какой стек мониторинга вы использовали в проекте и какие метрики собирали?

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

Ответ

В последнем проекте использовался стек Prometheus + Grafana для мониторинга Spring Boot приложения. Сбор метрик был реализован с помощью библиотеки Micrometer, которая интегрируется с Prometheus.

Собранные метрики:

  1. JVM-метрики: Использование heap и non-heap памяти, активность сборщика мусора (GC), количество потоков.
  2. HTTP-метрики: Время обработки запросов (тайминги), количество запросов, коды ответов (2xx, 4xx, 5xx). Настраивались автоматически через Spring Boot Actuator.
  3. Бизнес-метрики: Кастомные счетчики и таймеры для ключевых операций (например, создание заказа, обработка платежа).

Пример настройки и использования Micrometer:

  1. Добавление общего тега (например, имени приложения):

    @Configuration
    public class MetricsConfig {
        @Bean
        MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
            return registry -> registry.config()
                .commonTags("application", "order-service");
        }
    }
  2. Создание кастомной бизнес-метрики (счетчик):

    @Service
    public class OrderService {
        private final MeterRegistry meterRegistry;
        private final Counter ordersCreatedCounter;
    
        public OrderService(MeterRegistry meterRegistry) {
            this.meterRegistry = meterRegistry;
            this.ordersCreatedCounter = Counter.builder("orders.created")
                .description("Total number of created orders")
                .tag("type", "online") // Динамические теги можно добавлять при инкременте
                .register(meterRegistry);
        }
    
        public Order createOrder() {
            // Логика создания заказа...
            ordersCreatedCounter.increment(); // Увеличиваем счетчик
            return order;
        }
    }

Визуализация и алертинг:

  • Grafana: Использовалась для создания информативных дашбордов, объединяющих метрики из Prometheus.
  • Alertmanager (Prometheus): Настраивались правила алертинга (например, при высокой частоте 5xx ошибок или критическом заполнении heap-памяти), которые отправляли уведомления в Slack/Telegram.