Ответ
В последнем проекте использовался стек Prometheus + Grafana для мониторинга Spring Boot приложения. Сбор метрик был реализован с помощью библиотеки Micrometer, которая интегрируется с Prometheus.
Собранные метрики:
- JVM-метрики: Использование heap и non-heap памяти, активность сборщика мусора (GC), количество потоков.
- HTTP-метрики: Время обработки запросов (тайминги), количество запросов, коды ответов (2xx, 4xx, 5xx). Настраивались автоматически через Spring Boot Actuator.
- Бизнес-метрики: Кастомные счетчики и таймеры для ключевых операций (например, создание заказа, обработка платежа).
Пример настройки и использования Micrometer:
-
Добавление общего тега (например, имени приложения):
@Configuration public class MetricsConfig { @Bean MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() { return registry -> registry.config() .commonTags("application", "order-service"); } } -
Создание кастомной бизнес-метрики (счетчик):
@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.