JavaRush /Курси /Модуль 5. Spring /Лекція 157: Додавання логування та моніторингу через Spri...

Лекція 157: Додавання логування та моніторингу через Spring Boot Actuator

Модуль 5. Spring
Рівень 25 , Лекція 6
Відкрита

Сьогодні дізнаємось, як за допомогою Spring Boot Actuator зробити ваш додаток більш спостережуваним. Зокрема, розглянемо:

  1. Підключення та налаштування Spring Boot Actuator.
  2. Використання вбудованих метрик та ендпоінтів для моніторингу.
  3. Логування та інтеграцію з зовнішніми системами, такими як Grafana, Prometheus і ELK (Elasticsearch, Logstash, Kibana).
  4. Налаштування кастомних метрик для вашого додатку.

Отже, готуйтесь, час зазирнути під капот вашого застосунку!


Підключення Spring Boot Actuator

Нагадаю, Spring Boot Actuator — це модуль, який додає спостережуваність і надає метрики, доступні через API або консоль. Це справжній інструмент джедая для розробника, що хоче слідкувати за своїм додатком.

Офіційна документація: Spring Boot Actuator

Почнемо з додавання залежності Actuator у проєкт. Переконайся, що у тебе встановлений Spring Boot (якщо раптом забув це зробити раніше).

Підключаємо залежність

Додай наступну залежність у свій pom.xml:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Якщо використовуєш Gradle, додай:


implementation 'org.springframework.boot:spring-boot-starter-actuator'

Після цього виконай mvn install або gradle build, щоб підтягнути залежності у проєкт.


Основні можливості Actuator

Actuator надає набір готових ендпоінтів для моніторингу та керування додатком. Ось кілька з них:

Ендпоінт Призначення
/actuator/health Показує статус додатку (UP/DOWN)
/actuator/info Загальна інформація про додаток (налаштовується)
/actuator/metrics| Метрики продуктивності додатку
/actuator/env Змінні оточення та їхні значення
/actuator/loggers| Управління рівнями логування
/actuator/beans Інформація про всі Spring Beans, зареєстровані у додатку

Налаштування і активація ендпоінтів

Крок 1: Дозвіл ендпоінтів

За замовчуванням не всі ендпоінти Actuator доступні. Давайте відкриємо їх у конфігурації:


# application.yml
management:
  endpoints:
    web:
      exposure:
        include: "*" # Відкриваємо всі ендпоінти

Або, якщо використовуєш application.properties:


management.endpoints.web.exposure.include=*

Відкрий браузер і перейди за адресою http://localhost:8080/actuator. Побачиш список доступних ендпоінтів.


Крок 2: Увімкнення метрик

Spring Boot Actuator інтегрований з Micrometer, інструментом для збору метрик продуктивності. На початку подивимось на кілька вбудованих метрик:

  1. Запусти додаток.
  2. Перейдіть на /actuator/metrics.
  3. Побачиш список усіх доступних метрик. Наприклад:

{
  "names": [
    "jvm.memory.used",
    "jvm.memory.max",
    "process.uptime",
    "system.cpu.usage",
    "http.server.requests"
  ]
}

Спробуй перейти на конкретну метрику, наприклад /actuator/metrics/system.cpu.usage. Отримаєш дані про завантаження процесора.


Інтеграція з Prometheus

Prometheus — система моніторингу, яка чудово працює в парі з Actuator. Налаштуємо її.

Крок 1: Додаємо залежність Prometheus


<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Крок 2: Увімкни ендпоінт /actuator/prometheus


management:
  endpoints:
    web:
      exposure:
        include: prometheus

Тепер Prometheus зможе збирати дані з твого додатку, відправляючи запити на /actuator/prometheus.


Логування через ELK-стек

З логами все просто: вони мають бути читабельними та централізованими. Для цього відмінно підходить комбінація Elasticsearch, Logstash та Kibana.

Крок 1: Налаштуй файл logback-spring.xml

Створи файл logback-spring.xml в директорії src/main/resources.


<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/spring-boot-app.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

Крок 2: Інтеграція з Logstash

Logstash буде збирати логи з файлу spring-boot-app.log. Налаштуй його на відправку даних в Elasticsearch для подальшого аналізу в Kibana.


Налаштування кастомних метрик

Припустимо, ти хочеш відстежувати, скільки разів викликається певний метод у твоєму додатку. Для створення власних метрик можна використати Micrometer.

Приклад: Кастомна метрика

Додай наступну конфігурацію:


import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class CustomMetricsService {

    private final Counter customCounter;

    public CustomMetricsService(MeterRegistry registry) {
        this.customCounter = registry.counter("custom.metric.counter", "type", "custom_metric");
    }

    public void performAction() {
        // Логіка методу
        customCounter.increment(); // Збільшуємо лічильник
    }
}

Тепер при кожному виклику performAction() твій кастомний лічильник буде зростати. Цю метрику можна побачити на ендпоінті /actuator/metrics/custom.metric.counter.


Забезпечення безпеки метрик

Не всі ендпоінти Actuator варто відкривати всім. Наприклад, /actuator/metrics та /actuator/beans містять важливу інформацію, яку можуть використати зловмисники. Використай Spring Security, щоб обмежити доступ:


@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/actuator/health").permitAll() // Доступно всім
        .antMatchers("/actuator/**").authenticated() // Вимагає аутентифікації
        .and()
        .httpBasic();
}

Тепер твій додаток не лише функціональний, а й спостережуваний! Можеш аналізувати метрики, логувати події й бути впевненим, що додаток працює стабільно.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ