Интеграция Spring Boot Actuator очень проста, сложная часть — это сценарий приложения!

Spring Boot задняя часть монитор

предисловие

Когда я увидел фреймворк Spring Boot Actuator, я все время думал, что он делает? Зная, что он предоставляет множество конечных точек, которые помогают в мониторинге и управлении приложениями, трудно быть убедительным без прямого практического примера.

До предыдущей статьи»Архитектура микросервиса: микросервис PK локального кэша Nacos изящно переходит в автономный режим” упомянул, что конечные точки, определенные Actuator, можно использовать для достижения элегантного автономного эффекта микросервисов только для того, чтобы обнаружить, что Actuator действительно полезен.

Итак, эта статья основана на том, как система Spring Boot интегрирует Actuator, как его использовать и как настроить конечную точку (конечную точку).

Введение в Spring Boot Actuator

Spring Boot Actuator — это функциональный модуль, предоставляемый Spring Boot для самоанализа и мониторинга системы приложения, на основе которого разработчики могут легко просматривать, подсчитывать, проверять и собирать показатели для некоторых показателей мониторинга системы приложения. Actuator обеспечивает управление и мониторинг приложений на основе конечных точек Http или JMX.

Друзья, которые плохо знакомы с Actuator, обычно сомневаются: к Actuator можно получить доступ через конечные точки Http, так в чем же разница между ним и внешним сервисом @Controller, предоставляемым Spring Web? Все они разрешают внешний доступ к приложению через Http, но границы определения функций разные. Как упоминалось выше, Actuator обычно используется для мониторинга и управления рабочим состоянием самого приложения, в то время как @Controller больше используется на бизнес-уровне. Сравнивая его с @Controller, вам может быть легче понять роль Actuator.

Функция привода по умолчанию

Actuator предоставляет несколько интерфейсов REST по умолчанию, на основе которых мы можем легко понять текущее состояние приложения. Некоторые из этих портов являются конфиденциальными и требуют специальных разрешений для доступа к ним.

С помощью Actuator вы можете отслеживать информацию о работоспособности приложения, информацию о приложении Info, информацию об отслеживании HTTP-запросов, информацию о метриках, информацию о пути @RequestMapping, различную информацию о конфигурации приложения, а также количество раз и время запросов программы.

Здесь нет объяснения конкретных конечных точек, потому что разные версии все равно разные. Давайте сначала рассмотрим открытие всех конечных точек, а затем доступ кhttp://localhost:8080/actuatorИнформация о конечной точке, которую можно увидеть.

actuator-01.jpg

Используйте тот же метод, чтобы проверить, какие конечные точки содержит ваша версия.

Интеграция с Spring Boot

Интегрировать Spring Boot Actuator в проект Spring Boot очень удобно, достаточно добавить соответствующие зависимости в файл pom:

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

Здесь используется версия Spring Boot 2.2.2.RELEASE. Запустите проект, посетитеhttp://localhost:8080/actuatorВы можете увидеть текущую доступную информацию о списке портов:

{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}

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

На этом этапе, если вам нужно просмотреть все конечные точки, упомянутые выше, вы можете настроить следующее в файле конфигурации приложения:

management:
  endpoints:
    web:
      exposure:
        include: '*'
    jmx:
      exposure:
        include: '*'

Это позволит вам увидеть все конечные точки. Этот метод работает только для версий после Spring Boot 2.0. Следует отметить, что * в конфигурации необходимо добавлять с одинарными или двойными кавычками.

Кроме того, эта форма конфигурации не рекомендуется. Это раскрывает все конечные точки без проверки авторизации. Предлагаемый шаблон заключается в том, чтобы указать, какие конечные точки используются, непосредственно в файле include. В то же время конфиденциальные операции также требуют аутентификации.

Форма указанной конфигурации выглядит следующим образом:

management:
  endpoints:
    web:
      exposure:
        include: health,info
    jmx:
      exposure:
        include: health,info

Различные конечные точки могут быть разделены запятыми.

Структура данных конечной точки

Фактически, вначале мы видели структуру данных, возвращаемую /actuator, которая является информацией о конечной точке. Вы также можете увидеть адреса других доступных конечных точек в возвращаемой информации /actuator, например здесьhttp://localhost:8080/actuator/health, структура следующая:

{
"status": "UP"
}

Результат, возвращаемый конечной точкой, находится в формате JSON, а статус — UP, что означает, что система работает исправно. Конечно, для доступа к другим конечным точкам возвращаемые результаты в основном одинаковы, поэтому я не буду показывать их здесь по одному.

остановить службу

В приведенных выше конечных точках вы обнаружите, что нет конечной точки для отключения службы. Да, по умолчанию, даже если для включения установлено значение «*», такие службы, как выключение, по-прежнему не включены.

Для этого типа операции нам сначала нужно сделать его доступным:

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'
    jmx:
      exposure:
        include: '*'

На этом этапе, если вы снова посетите /actuator, вы увидите путь, соответствующий конечной точке /shutdown.http://localhost:8080/actuator/shutdown.

Отправьте почтовый запрос на эту конечную точку с помощью команды curl или почтальона и т. д.:

curl -X "POST" "http://localhost:8080/actuator/shutdown"

После выполнения служба обнаружения была закрыта. Есть много операций, похожих на остановку сервера, таких как перезапуск, пауза, перезапуск и т. д. Его можно настроить в соответствии с конкретной версией.В текущей версии найдена только конечная точка выключения, а элементы конфигурации для конечных точек, такие как перезапуск, пауза и перезапуск, не найдены.

С помощью описанного выше метода приложение SpringBoot можно корректно закрыть, но существуют большие риски для безопасности.Если вы знаете IP-адрес и номер порта, вы можете имитировать запрос на остановку службы, поэтому вам необходимо добавить некоторые ограничения безопасности.

  • management.endpoints.web.base-path настраиваемый путь запроса на завершение работы;
  • management.server.address устанавливается на локальный ip, чтобы предотвратить удаленный доступ к соединению для закрытия службы;
  • management.server.port Настройте номер порта пути запроса на завершение работы;

Скорректированный файл конфигурации выглядит следующим образом:

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'
    jmx:
      exposure:
        include: '*'
  server:
    # 自定义端口
    port: 8080
    # 不允许远程管理连接,安全性考虑
    address: 127.0.0.1

Конечно, если этот метод вам не подходит, вы также можете рассмотреть возможность внедрения spring-boot-starter-security для обеспечения безопасности конечных точек Actuator с помощью Spring Security.В настоящее время при повторном доступе требуется проверка имени пользователя и пароля. О Spring Security не будет распространяться в этой статье.

Пользовательская конечная точка

Хотя конечные точки по умолчанию могут удовлетворить большинство потребностей, некоторые особые потребности все же должны поддерживать настраиваемые конечные точки. Чтобы настроить конечную точку конечной точки, нам нужно только использовать аннотацию @Endpoint для нашего нового компонента, а методы в компоненте могут быть представлены через JMX или HTTP. Кроме того, EndPoints можно записывать с помощью @JmxEndpoint или @WebEndpoint. Но эти EndPoints ограничены тем, как они выставлены. Например, @WebEndpoint предоставляется только через HTTP, а не через JMX.

Итак, все ли методы в классе поддерживают общедоступность? Очевидно нет. Actuator предоставляет три аннотации для методов. Только методы с тремя аннотациями поддерживают внешнее раскрытие, и каждая аннотация имеет HTTP-метод, который ее поддерживает.

@ReadOperation соответствует запросам HTTP GET, @WriteOperation соответствует запросам HTTP POST, а @DeleteOperation соответствует запросам HTTP DELETE.

Давайте рассмотрим простой пример использования:

@Component
@Endpoint(id = "my")
public class EndpointCustom {

   @ReadOperation
   public String endpointCustomRead(String content) {
      return "请求的内容: " + content;
   }

   @WriteOperation
   public String endpointCustomWrite(String content) {
      return "写的内容: " + content;
   }

   @DeleteOperation
   public String endpointCustomDelete(String content) {
      return "删除的内容: " + content;
   }

}

Соответствует GET-запросу:

curl -X GET http://localhost:8080/actuator/my?content=endpointGet

После выполнения будет возвращена информация «запрошенный контент: endpointGet».

Тот же POST-запрос:

curl -X POST http://localhost:8080/actuator/my?content=endpointPost

Запрос DELETE:

curl -X DELETE http://localhost:8080/actuator/my?content=endpointDELETE

Вышеприведенный пример является простым пользовательским экземпляром.В соответствии с конкретными бизнес-сценариями могут быть определены более многочисленные реализации конечных точек.

резюме

В этой статье мы узнали об основных операциях встроенного в Spring Boot привода. Интеграция очень проста, потому что Spring Boot сделал большую часть вещей за нас, нам нужно только настроить его целенаправленно. В случае, когда предопределенные конечные точки не могут соответствовать бизнес-требованиям, специальная обработка также может быть достигнута с помощью пользовательской формы. Самое важное, что нужно знать об Actuator, — это знать сценарии его применения.

Полный адрес источника этой статьи:GitHub.com/Цвета не так хороши/Судный день…

Профиль блоггера: автор технической книги SpringBoot Technology Insider, который любит изучать технологии и писать технические статьи.

Публичный аккаунт: "Новые горизонты программ", публичный аккаунт блогера, прошу обратить внимание~

Технический обмен: пожалуйста, свяжитесь с блогером WeChat ID: zhuan2quan