Какой опыт работы с метриками и мониторингом в 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.

Ответ 18+ 🔞

Да ты посмотри, какая хуйня, блядь! Всё это про мониторинг Java-приложений, аж ебушки-воробушки. Сидел, значит, в этой своей конторе и настраивал вот эту всю пиздопроебибну: Micrometer + Prometheus + Grafana. Три кита, на которых держится твоё спокойствие, что сервис не накрылся медным тазом, пока ты спишь.

Что я там, сука, делал, по пунктам:

  1. Инструментация кода. Это когда ты в свой красивый код начинаешь впендюривать вызовы, чтобы он сам про себя рассказывал, какой он молодец, или, наоборот, где он проёбывается. Тайминги запросов, память JVM, сборки мусора — вся эта хуйня. И бизнес-метрики, блядь, чтобы считать, сколько раз пользователь нажал на красную кнопку, а не на синюю.
  2. Экспорт и сбор. Всё это добро вываливается наружу, а Prometheus — этот такой хитрожопый сборщик — ходит и подбирает, как голодный пёс. Раз в N секунд: "Дай-ка я пососю у тебя с /actuator/prometheus".
  3. Визуализация и алертинг. А потом ты это всё тащишь в Grafana, рисуешь красивые графики, которые через час уже никому не нужны. Главное — алерты настроить, чтобы тебе в три ночи пришло: "Чувак, бля, память кончилась, просыпайся, ебать твою в сраку!".

Вот смотри, как это в коде выглядит, я тебе кусочек оставлю, не трогаю его:

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";
    }
}

А вот так это в конфиге прописывается (application.yml):

management:
  endpoints:
    web:
      exposure:
        include: health, prometheus, metrics # Выставляем напоказ нужные эндпоинты
  metrics:
    export:
      prometheus:
        enabled: true # Говорим: "Да, бля, я хочу, чтобы Prometheus меня сосал"
    tags:
      application: my-service # И все метрики помечаем, от какого они сервиса, чтобы не запутаться, чья это жопа

И всё, сука! Spring Boot Actuator сам тебе endpoint /actuator/prometheus сделает, как по маслу. Остаётся только в Grafana нарисовать дашборд, от которого глаза разбегутся, и настраивать алерты, чтобы волосы дыбом вставали. В общем, стандартная магия, без которой сейчас — нихуя.