Ответ
Работал с внедрением и настройкой метрик для мониторинга Java-приложений, используя стек Micrometer + Prometheus + Grafana.
Ключевые практики:
- Инструментация кода через Micrometer для сбора:
- Метрик производительности (тайминги HTTP-запросов, JVM — память, CPU, GC)
- Бизнес-метрик (счётчики событий, гистограммы)
- Экспорт и сбор метрик в Prometheus.
- Визуализация и алертинг в 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. Три кита, на которых держится твоё спокойствие, что сервис не накрылся медным тазом, пока ты спишь.
Что я там, сука, делал, по пунктам:
- Инструментация кода. Это когда ты в свой красивый код начинаешь впендюривать вызовы, чтобы он сам про себя рассказывал, какой он молодец, или, наоборот, где он проёбывается. Тайминги запросов, память JVM, сборки мусора — вся эта хуйня. И бизнес-метрики, блядь, чтобы считать, сколько раз пользователь нажал на красную кнопку, а не на синюю.
- Экспорт и сбор. Всё это добро вываливается наружу, а Prometheus — этот такой хитрожопый сборщик — ходит и подбирает, как голодный пёс. Раз в N секунд: "Дай-ка я пососю у тебя с
/actuator/prometheus". - Визуализация и алертинг. А потом ты это всё тащишь в 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 нарисовать дашборд, от которого глаза разбегутся, и настраивать алерты, чтобы волосы дыбом вставали. В общем, стандартная магия, без которой сейчас — нихуя.