Сьогодні поговоримо про один із найкорисніших аспектів Spring Boot Actuator — метрики та здоров'я застосунку. Моніторинг стану системи — це не лише можливість відчути себе трохи "лікарем" вашого застосунку, а й незамінний інструмент для аналізу продуктивності та вирішення проблем.
Які метрики доступні через Actuator?
Spring Boot Actuator надає широкий спектр метрик за замовчуванням. На відміну від ситуації, коли доводиться самому копатися в коді, щоби з'ясувати, чому ваш сервер раптово почав "йти на тихий час", Actuator робить це за вас, збираючи і надаючи дані про стан застосунку.
Ось деякі метрики, які надаються Actuator за замовчуванням (і трохи гумору для нашого списку):
- Пам'ять JVM: скільки пам'яті активно використовується, скільки вільно, і що взагалі відбувається у вашому "сміттєвому відрі".
- Потоки: поточна активність потоків. Це корисно, щоб перевірити, чи не намагається ваш застосунок використати все, що йому доступно, як дитина з цукерками.
- Завантаження CPU: допомагає зрозуміти, чи сильно ваш процесор "потіє".
- HTTP-сесії: моніторинг кількості активних сесій (так, клієнти іноді можуть бути занадто допитливими).
- Час відгуку на запити: як швидко ваш застосунок реагує (або не реагує) на вхідні запити.
- Частота помилок: рятівник для тих, хто хоче знайти, де система пішла не за планом.
Перегляд метрик
Ці метрики можна спостерігати через ендпоїнт /actuator/metrics. Наприклад, якщо відкрити в браузері:
http://localhost:8080/actuator/metrics
Ви побачите список усіх доступних метрик, таких як jvm.memory.used, system.cpu.usage, http.server.requests та інші.
Для перегляду детальної інформації по конкретній метриці можна використати запит:
http://localhost:8080/actuator/metrics/{metricName}
Наприклад, щоб побачити метрику, пов'язану з використанням пам'яті JVM:
http://localhost:8080/actuator/metrics/jvm.memory.used
Ендпоїнт /health: перевірка стану застосунку
Що, якщо вашому застосунку стало не дуже? Ендпоїнт /actuator/health — це ваше вікно в його стан. Він дозволяє перевірити, чи працює застосунок коректно, і відповідає "здорово" або "не дуже".
Ендпоїнт /health надає інформацію про стан застосунку у вигляді JSON-відповіді. Ось як може виглядати базова відповідь, якщо з застосунком усе в порядку:
{
"status": "UP"
}
Якщо в системі є яка-небудь проблема, наприклад, недоступна база даних, статус зміниться на DOWN, а в полі details з'являться дані про те, що саме пішло не так.
Приклад відповіді, якщо база даних недоступна:
{
"status": "DOWN",
"components": {
"db": {
"status": "DOWN",
"details": {
"error": "java.sql.SQLException: Cannot connect to database"
}
}
}
}
Виведення додаткових даних
За замовчуванням, ендпоїнт /health має обмежений доступ і показує тільки статус. Однак можна налаштувати його так, щоб він розкривав більше інформації. Це робиться через властивості у файлі application.properties або application.yml. Наприклад:
management.endpoint.health.show-details=always
Тепер ендпоїнт /health буде показувати такі деталі, як статус бази даних, сесій тощо.
Налаштування рівня видимості метрик
Spring Boot Actuator за замовчуванням береже вашу інформацію і не прагне відкрити її всьому світу. Однак ви можете налаштувати доступ до метрик і їх видимість.
Якщо хочете контролювати видимість ендпоїнтів Actuator, можна використати таке властивість:
management.endpoints.web.exposure.include=health, metrics
Тут ми кажемо, що для зовнішнього доступу будуть доступні тільки ендпоїнти health і metrics. Щоби включити всі стандартні ендпоїнти, використовуйте значення *:
management.endpoints.web.exposure.include=*
Якщо, навпаки, ви хочете виключити якісь ендпоїнти, можна зробити так:
management.endpoints.web.exposure.exclude=shutdown
Обмеження доступу на основі ролей
Для продакшн-середовища важливо захистити ендпоїнти за допомогою Spring Security, щоб лише авторизовані користувачі могли бачити метрики. Наприклад, можна налаштувати доступ тільки для користувачів з роллю ADMIN.
Застосування метрик у реальному житті
Знання своїх метрик допомагає уникнути сценаріїв, коли ваш застосунок "здає позиції" під навантаженням, а ви дізнаєтеся про це останнім. Ось як ці знання можна застосувати:
- Аналіз продуктивності: метрики дозволяють відслідковувати, наскільки швидко і ефективно працює ваш застосунок. Це допоможе виявити вузькі місця в продуктивності.
- Усунення помилок: частота помилок у запитах покаже, що щось іде не так, раніше ніж користувачі почнуть масово скаржитися.
- Запобігання збоїв: моніторинг стану системи, такого як пам'ять і CPU, дозволяє завчасно помітити проблеми і вжити заходів.
Приклад: використання метрики «Кількість запитів»
Уявімо, що ви хочете дізнатися, як часто до вашого застосунку звертаються користувачі. Для цього можна використати метрику http.server.requests. Ось як це зробити:
Відкриваємо в браузері:
http://localhost:8080/actuator/metrics/http.server.requests
Відповідь може виглядати так:
{
"name": "http.server.requests",
"measurements": [
{
"statistic": "count",
"value": 150
},
{
"statistic": "totalTime",
"value": 123.45
}
],
"availableTags": [
{
"tag": "status",
"values": ["200", "404", "500"]
},
{
"tag": "method",
"values": ["GET", "POST"]
}
]
}
Тут бачимо, що було оброблено 150 запитів, а загальний час виконання склав 123,45 секунди. Такий підхід допомагає зрозуміти інтенсивність використання вашого API.
Тепер, коли ви знаєте, які метрики доступні через Spring Boot Actuator і як перевірити стан вашого застосунку, вам буде простіше керувати ним. Наступного разу, коли ваш сервер вирішить "трохи приуняти", ви будете озброєні потрібними інструментами. Ну, або принаймні дізнаєтеся про це раніше, ніж користувачі почнуть писати в чат техпідтримки.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ