Шаг 1: Активация встроенных возможностей Actuator. Spring Boot Actuator — это отправная точка. Добавьте зависимость `spring-boot-starter-actuator` в `pom.xml` или `build.gradle`. По умолчанию активируется только эндпоинт `/actuator/health`. Для доступа к другим точкам (metrics, info, env) настройте их в `application.yml`:
```
management:
endpoints:
web:
exposure:
include: health, metrics, info, env, beans, loggers
endpoint:
health:
show-details: always
```
Теперь `/actuator/health` даст детальный статус БД, диска, внешних сервисов. `/actuator/metrics` покажет список всех метрик JVM, которые собираются «из коробки».
Шаг 2: Настройка сбора кастомных метрик. Встроенных метрик недостаточно. Используйте Micrometer — абстракцию над системами мониторинга, которая поставляется с Spring Boot.
- **Бизнес-метрики**: Инжектируйте `MeterRegistry` и создавайте счётчики, таймеры, gauges.
public OrderService(MeterRegistry registry) {
orderCounter = registry.counter("orders.created");
}
public void createOrder() {
// бизнес-логика
orderCounter.increment();
}
```
- **Метрики времени выполнения методов**: Используйте аннотацию `@Timed` из `io.micrometer.core.annotation` на методах или классах для автоматического сбора гистограмм времени выполнения.
- Добавьте зависимость `micrometer-registry-prometheus`.
- Включите эндпоинт `prometheus` в exposure.
- Настройте Prometheus на сбор метрик с `/actuator/prometheus` вашего приложения.
- В Grafana создайте дашборды, используя данные из Prometheus. Используйте готовые дашборды для JVM (например, Micrometer) или создавайте свои для бизнес-метрик.
- Используйте структурированное логирование (JSON) с помощью Logback или Log4j2. Добавьте зависимость, например, `logstash-logback-encoder`.
- Настройте appender для отправки логов напрямую в Logstash или Kafka.
- Обогащайте логи контекстной информацией: `traceId`, `userId`, `tenantId`. Для этого используйте MDC (Mapped Diagnostic Context) в связке с Spring Sleuth.
- Добавьте зависимости `spring-cloud-starter-sleuth` и, для экспорта, `micrometer-tracing-bridge-brave` вместе с экспортером (например, в Zipkin или Jaeger).
- Spring Sleuth автоматически будет добавлять в логи и заголовки HTTP-запросов уникальные `traceId` и `spanId`.
- Настройте экспорт трассировок в бэкенд (например, Zipkin). В `application.yml` укажите адрес экспортера.
- Анализируйте трассировки для поиска узких мест: какой сервис или запрос к БД занимает больше всего времени.
```java
@Component
public class ExternalApiHealthIndicator implements HealthIndicator {
@Override
public Health health() {
// выполнить проверку
return Health.up().withDetail("responseTime", "120ms").build();
}
}
```
Эти проверки будут отображаться на `/actuator/health` и могут использоваться оркестраторами (Kubernetes) для проверки готовности (readiness probe).
Шаг 7: Настройка алертинга. Мониторинг без алертов бесполезен. Настройте правила в вашей системе.
- **В Prometheus Alertmanager**: создавайте правила на основе метрик (например, `http_server_requests_seconds_count{uri="/api/orders",status="500"} > 5` за 2 минуты).
- **В Grafana**: настраивайте алерты прямо на дашбордах.
- **Для логов**: используйте возможности Elasticsearch или Sentry для алертов на ошибки.
Шаг 8: Проактивный мониторинг и APM. Для глубокого анализа производительности кода (time spent in methods, SQL-запросы) рассмотрите использование APM-решений, таких как Dynatrace, New Relic или OpenTelemetry агенты. Они интегрируются с Spring Boot и предоставляют детальную информацию на уровне кода, что незаменимо для оптимизации.
Профессиональный мониторинг Spring Boot — это многослойная система. Начните с основ (Actuator + метрики), затем постепенно добавляйте логирование, трассировку и алертинг. Помните, что цель — не просто собирать данные, а превращать их в действия, которые повышают надёжность и производительность вашего приложения.
Комментарии (14)