JavaRush /Курси /Модуль 5. Spring /Лекція 115: Практика — налаштування та перегляд метрик до...

Лекція 115: Практика — налаштування та перегляд метрик додатку

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

1. Інтеграція Actuator у навчальний проєкт

Для початку потрібно підключити Spring Boot Actuator до нашого вже існуючого (або нового) проєкту. Підключення Actuator — це по суті додавання залежності.

Якщо ти користуєшся Maven, додай наступну залежність у pom.xml:

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

Якщо працюєш з Gradle, додай цей рядок у свій build.gradle:

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

Після цього онови залежності проєкту. Actuator увімкнено! Легко ж, правда? Справжня магія Spring!


2. Перевірка доступності ендпоінтів

Після додавання залежності Actuator запусти свій додаток. За замовчуванням Actuator надає кілька стандартних ендпоінтів для моніторингу.

Наприклад:

  • /actuator/health — стан додатку.
  • /actuator/info — інформація про додаток.
  • /actuator/metrics — різні метрики продуктивності.

Спробуй відкрити /actuator/health у браузері або Postman'і. Якщо бачиш щось типу {"status":"UP"}, то Actuator успішно інтегрувався в проєкт.

Секретний шлях до щастя: налаштування базового шляху ендпоінтів

Якщо хочеш зробити шлях до цих ендпоінтів зручнішим або, навпаки, захистити їх від надто цікаві очей — можна змінити базовий шлях у файлі application.properties:

management.endpoints.web.base-path=/my-actuator

Тепер усі ендпоінти будуть доступні, наприклад, за адресою /my-actuator/health.


3. Перегляд метрик

Робота з /metrics

Ендпоінт /actuator/metrics — справжня скарбниця. Тут знайдеш метрики про кількість активних потоків, використання пам'яті, навантаження на CPU та багато іншого. Набери в браузері або Postman'і:

http://localhost:8080/actuator/metrics

Список метрик може бути вражаючим. Ось приклад того, що ти можеш побачити:

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

Можеш запросити детальну інформацію для конкретної метрики. Наприклад, щоб побачити, скільки пам'яті використовує JVM, запитай:

http://localhost:8080/actuator/metrics/jvm.memory.used

І отримаєш щось на кшталт цього:

{
  "name": "jvm.memory.used",
  "measurements": [
    {
      "statistic": "VALUE",
      "value": 12345678
    }
  ],
  "availableTags": [
    {
      "tag": "area",
      "values": ["heap", "nonheap"]
    }
  ]
}

«Ага, я тепер знаю, скільки пам'яті йде!» — скажеш ти. І будеш правий.


Практичне завдання: увімкнення ендпоінтів

Не всі ендпоінти Actuator увімкнені за замовчуванням. Давай активуємо додаткові метрики. В application.properties додай наступну настройку:

management.endpoints.web.exposure.include=*

Тепер доступні всі ендпоінти Actuator. Спробуй оновити список доступних метрик, звернувшись до /actuator.


4. Аналіз метрик у реальному часі

Уяви, що ти адміністратор (або "Володар метрик"), і твій додаток раптово почав гальмувати. Ти можеш перевірити /metrics і з'ясувати, чи є підвищене навантаження. Наприклад, метрика http.server.requests покаже, які запити створюють навантаження.

Ось як це може виглядати:

{
  "name": "http.server.requests",
  "measurements": [
    {
      "statistic": "COUNT",
      "value": 120
    },
    {
      "statistic": "MAX",
      "value": 150.5
    }
  ],
  "availableTags": [
    {
      "tag": "method",
      "values": ["GET", "POST"]
    },
    {
      "tag": "uri",
      "values": ["/api/users", "/api/orders"]
    }
  ]
}

Можеш дізнатися, скільки запитів, наприклад, обробляється на /api/users. Корисно? Безумовно.


5. Практичне завдання: налаштування кастомної метрики

Отже, час додати трохи імпровізації й налаштувати власну метрику. Уяви, що потрібно відслідковувати кількість товарів у кошику користувачів.

Додай цей код у один із компонентів:


import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;

@Component
public class CartMetrics {

    private final MeterRegistry meterRegistry;

    public CartMetrics(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }

    public void incrementCartItems(int items) {
        meterRegistry.counter("cart.items.added").increment(items);
    }
}

Тепер викликай метод incrementCartItems() при додаванні товарів у кошик. Метрика cart.items.added почне відслідковувати загальну кількість доданих товарів. Можеш перевірити її через:

http://localhost:8080/actuator/metrics/cart.items.added

6. Покращення через спостереження

На основі отриманих даних у реальному часі можна приймати рішення. Наприклад, якщо побачиш, що метрика jvm.memory.used постійно близька до максимуму, можливо, варто переробити логіку роботи з великими об'єктами або збільшити розмір heap для JVM.

Якщо метрика http.server.requests показує аномально низький час обробки — це хороший сигнал, що твій додаток справляється з навантаженням. Але якщо навпаки, час збільшується, можливо, час задуматися про кешування або масштабування.


Завдання для самостійної роботи

Тепер, коли ти експерт у налаштуванні й використанні метрик, спробуй зробити наступне:

  1. Налаштуй Actuator у своєму навчальному проєкті.
  2. Увімкни всі ендпоінти.
  3. Знайди й проаналізуй три ключові метрики додатку (наприклад, продуктивність запитів, використання пам'яті та завантаження CPU).
  4. Налаштуй кастомну метрику для відстеження якогось важливого аспекту твого додатку (наприклад, кількість виконаних користувацьких операцій за день).
  5. Спробуй знайти проблеми в своєму додатку, використовуючи метрики.

І не забудь відчути себе справжнім супергероєм моніторингу!

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