JavaRush /Курси /Модуль 5. Spring /Лекція 120: Логування системних подій через Actuator

Лекція 120: Логування системних подій через Actuator

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

І знову поговоримо про логи.

У реальному світі логи можуть включати:

  • Перехоплення помилок та винятків.
  • Запис ключових операцій, наприклад, завершення транзакцій.
  • Відстеження активності користувачів.
  • Аналіз продуктивності через часові позначки та деталі запитів.

Поєднання логування й Actuator дозволяє отримати не тільки дані про поточний стан додатка, але й історичну інформацію для аналізу, що робить систему максимально прозорою.


Увімкнення логування через Actuator

Spring Boot Actuator забезпечує зручний інтерфейс для взаємодії з логами твого додатка. Це робиться через ендпоінт /actuator/loggers. За його допомогою можна подивитися поточні налаштування логування або навіть змінити рівень логування на лету!

Додаємо залежності

По-перше, переконайся, що в твоєму проєкті підключені потрібні залежності. Додай Actuator, якщо ще не зробив цього:

pom.xml:


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

build.gradle:

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

Налаштування логування

Spring Boot Actuator дозволяє керувати логуванням через файл конфігурації application.properties або application.yml. Наприклад, можна включити ендпоінт /loggers за допомогою такого рядка:

management.endpoints.web.exposure.include=loggers

Цей параметр робить ендпоінт доступним для запитів. Можеш перевірити список усіх зареєстрованих логгерів або змінити їхній рівень логування на ходу.


Що показує ендпоінт /actuator/loggers?

Коли відкрити URL /actuator/loggers, побачиш JSON-об’єкт, що містить інформацію про всі зареєстровані логгери Spring.

Приклад структури JSON:

{
  "levels": ["OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"],
  "loggers": {
    "ROOT": {
      "configuredLevel": "INFO",
      "effectiveLevel": "INFO"
    },
    "com.example.myapp": {
      "configuredLevel": "DEBUG",
      "effectiveLevel": "DEBUG"
    }
  }
}

Тут:

  • levels — допустимі рівні логування.
  • loggers — поточні логгери з їхніми налаштуваннями. Логгер ROOT застосовується до всього додатка, якщо інше явно не вказано.

Зміна рівня логування

Ти можеш динамічно змінювати рівень логування для будь-якого компонента додатка через API. Наприклад, щоб змінити рівень логування для пакета com.example.myapp на TRACE, виконай HTTP-запит:

PUT-запит:


PUT /actuator/loggers/com.example.myapp
Content-Type: application/json

{
    "configuredLevel": "TRACE"
}

Переконайся, що зміни застосувалися, через GET /actuator/loggers/com.example.myapp.


Налаштування рівня логування

Логування в Spring Boot базується на популярних бібліотеках логування, таких як Logback, Log4j і Java Util Logging. Давай подивимось, як можна налаштувати логування для різних компонентів додатка.

Приклад application.properties:


# Рівень логування за замовчуванням
logging.level.root=INFO

# Рівень логування для власного пакету
logging.level.com.example.myapp=DEBUG

# Логування SQL-запитів (якщо використовується JPA)
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Ці рівні логування можна змінювати через /actuator/loggers.


Практика: Логування контролерів

Розглянемо практичний сценарій: додамо кілька логів у наш навчальний проєкт і відстежимо їх через Actuator.

Приклад контролера з логами

Контролер:


package com.example.myapp.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @GetMapping("/hello")
    public String sayHello() {
        logger.info("INFO: Handling /hello request");
        logger.debug("DEBUG: Additional debug information");
        logger.error("ERROR: Simulated error log (just an example)");
        return "Hello, Spring Boot with Actuator!";
    }
}

У цьому прикладі ми додали логи рівнів INFO, DEBUG і ERROR. Тепер можеш перевіряти ці події в лог-файлі додатка та керувати їх видимістю через Actuator.


Налаштування логування для безпеки

Логи безпеки особливо корисні при використанні Spring Security. Ось як можна налаштувати логування для аналізу вдалих і невдалих спроб входу в систему:

Приклад application.properties:

logging.level.org.springframework.security=DEBUG

Тепер запити, пов’язані з авторизацією й аутентифікацією, будуть логуватися. Це може допомогти виявити підозрілу активність.


Практичне завдання: робота з логами

Коротке завдання:

  1. Налаштуй у своєму проєкті ендпоінт /actuator/loggers.
  2. Додай логи з різними рівнями (INFO, WARN, DEBUG) в один із контролерів.
  3. Змініть рівень логування на ходу через PUT-запит до /actuator/loggers.
  4. Перевір, як зміни відображаються в логах.

Захист логів за допомогою Spring Security

Важливо пам’ятати, що дані в логах можуть бути чутливими. Налаштуй захист ендпоінта /actuator/loggers, щоб обмежити доступ лише для авторизованих користувачів.

Приклад сек’юрної конфігурації:


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests((requests) -> requests
                .requestMatchers("/actuator/loggers/**").hasRole("ADMIN")
                .anyRequest().authenticated()
        )
        .httpBasic();
        return http.build();
    }
}

Тепер лише користувачі з роллю ADMIN зможуть змінювати рівень логування або переглядати конфігурацію через /actuator/loggers.


Додатково: аналіз логів

Коли поєднаєш Actuator із зовнішніми системами, такими як ELK (Elasticsearch, Logstash, Kibana), логи стануть ще потужнішими. Можеш налаштовувати трасування запитів, які привели, наприклад, до помилки, і візуалізувати це.


Підсумок

Тепер твій додаток не тільки логує помилки, а й дозволяє гнучко керувати налаштуваннями логування через Actuator і API. Це допомагає мінімізувати час на пошук і виправлення проблем, а також дає більше контролю над моніторингом додатка.

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