Какой опыт работы с метриками и мониторингом в Java-приложениях?

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

Ответ

Работал с внедрением и настройкой метрик для мониторинга Java-приложений, используя стек Micrometer + Prometheus + Grafana.

Ключевые практики:

  1. Инструментация кода через Micrometer для сбора:
    • Метрик производительности (тайминги HTTP-запросов, JVM — память, CPU, GC)
    • Бизнес-метрик (счётчики событий, гистограммы)
  2. Экспорт и сбор метрик в Prometheus.
  3. Визуализация и алертинг в Grafana.

Пример кода с Micrometer в Spring Boot:

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

@RestController
public class DemoController {
    private final Counter requestCounter;

    public DemoController(MeterRegistry registry) {
        // Создание счётчика с тегами
        this.requestCounter = Counter.builder("http.requests")
                .tag("method", "GET")
                .tag("handler", "DemoController")
                .register(registry);
    }

    @GetMapping("/demo")
    public String endpoint() {
        // Инкремент метрики при запросе
        requestCounter.increment();
        return "OK";
    }
}

Конфигурация для Prometheus (application.yml):

management:
  endpoints:
    web:
      exposure:
        include: health, prometheus, metrics
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: my-service # Общие теги для всех метрик

Использовал Spring Boot Actuator (/actuator/prometheus) как стандартный endpoint для сбора данных. Для сложных дашбордов и алертов настраивал правила в Grafana, запрашивая данные из Prometheus.