JavaRush /Курсы /Модуль 5. Spring /Лекция 112: Основные метрики и информация о состоянии при...

Лекция 112: Основные метрики и информация о состоянии приложения

Модуль 5. Spring
12 уровень , 1 лекция
Открыта

Сегодня мы поговорим об одном из самых полезных аспектов 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 и как проверить состояние вашего приложения, вам будет проще управлять своим приложением. В следующий раз, когда ваш сервер решит "немного приуныть", вы будете вооружены нужными инструментами. Ну, или хотя бы узнаете об этом раньше, чем пользователи начнут писать в чате технической поддержки.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ