Введение в Spring Boot Admin
Spring Boot Admin — это проект сообщества с открытым исходным кодом для управления и мониторинга приложений Spring Boot. Приложения регистрируются на сервере администрирования Spring Boot как клиент администрирования Spring Boot (через HTTP) или обнаруживаются с помощью реестра Spring Cloud (например, Eureka, Consul). Пользовательский интерфейс представляет собой приложение AngularJs, показывающее некоторый мониторинг конечной точки Actuator клиента Spring Boot Admin. Общие функции или мониторинг следующие:
- Показать состояние здоровья
- Показать детали, такие как
- JVM и показатели памяти
- Метрики micrometer.io
- Показатели источника данных
- метрики кеша
- Показать номер информации о сборке
- Подпишитесь и скачайте лог-файлы
- Просмотр свойств системы и среды jvm
- Просмотр свойств конфигурации Spring Boot
- Поддержка публикуемых /env- и /refresh-конечных точек Spring Cloud.
- Простое управление уровнем журнала
- Взаимодействие с JMX-бинами
- Посмотреть дамп потока
- Посмотреть отслеживание http
- Просмотр событий аудита
- Просмотр http-конечных точек
- Просмотр запланированных задач
- Просмотр и удаление активных сеансов (используя spring-session)
- Ознакомьтесь с миграциями базы данных Flyway/Liquibase
- скачать кучу
- Уведомления об изменении статуса (по электронной почте, Slack, Hipchat, ...)
- Журнал событий для изменений состояния (непостоянный)
быстрый старт
Создать сервер администрирования Spring Boot
Версия Spring Boot всех проектов в этой статье — 2.1.0, а версия Spring Cloud — Finchley.SR2. Случай принимает многомодульную форму Maven, а родительский файл pom вводит следующие зависимости (полные зависимости см. в исходном коде):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
В проекте admin-server введены стартовая зависимость admin-server и стартовая зависимость web Код выглядит следующим образом:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Затем добавьте аннотацию @EnableAdminServer в класс запуска AdminServerApplication проекта, чтобы включить функцию AdminServer.Код выглядит следующим образом:
@SpringBootApplication
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run( AdminServerApplication.class, args );
}
}
Настройте имя программы и порт программы в файле конфигурации проекта application.yml, код выглядит следующим образом:
spring:
application:
name: admin-server
server:
port: 8769
Этот сервер администрирования создан.
Создайте клиент администрирования Spring Boot
Введите начальные зависимости admin-client и начальные зависимости web в файле pom проекта admin-client.Код выглядит следующим образом:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Настройте имя приложения и информацию о порте в файле конфигурации проекта application.yml, а адрес, зарегистрированный на сервере администратора, — http://localhost:8769, и, наконец, предоставьте всю информацию о порте своего собственного привода. следующее:
spring:
application:
name: admin-client
boot:
admin:
client:
url: http://localhost:8769
server:
port: 8768
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
Файлы запуска в проекте следующие:
@SpringBootApplication
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run( AdminClientApplication.class, args );
}
Запустите два проекта одновременно, введите localhost:8769 в браузере, и интерфейс, отображаемый браузером, будет следующим:
Посмотреть настенную панель:
Нажмите на настенный экран, чтобы просмотреть конкретную информацию о клиенте администратора, например информацию о состоянии памяти:
Также посмотрите на ситуацию с весенними бобами:
Для получения дополнительной информации о мониторинге испытайте ее на себе.
Spring boot Admin используется в сочетании с реестром SC
Как и в предыдущем случае, в этом случае также используются Spring Boot версии 2.1.0 и Spring Cloud версии Finchley.SR2. Случай принимает многомодульную форму Maven, а родительский файл pom вводит следующие зависимости (полные зависимости см. в исходном коде), которые здесь опущены.
Построить регистрационный центр
Также для реестра можно использовать Eureka и Consul, он представлен в файле pom в проекте eureka-server:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
Настройте информацию о порте eureka-server, а также defaultZone и предотвратите самостоятельную регистрацию. Наконец, система выставляет все порты активатора eureka-server.
spring:
application:
name: eureka-server
server:
port: 8761
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: false
fetch-registry: false
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
Добавьте аннотацию @EnableEurekaServer в файл запуска проекта EurekaServerApplication, чтобы включить Eureka Server.
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run( EurekaServerApplication.class, args );
}
}
эврика-сервер построен.
Построить админ-сервер
В файле pom проекта admin-server введите начальные зависимости admin-server, начальные зависимости web и начальные зависимости eureka-client следующим образом:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Затем настройте admin-сервер, имя приложения, информацию о порте. И зарегистрируйтесь в центре регистрации, адрес регистрации http://localhost:8761, и, наконец, все порты актуатора выставлены, и конфигурация выглядит следующим образом:
spring:
application:
name: admin-server
server:
port: 8769
eureka:
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
Добавьте аннотацию @EnableAdminServer в класс запуска AdminServerApplication проекта, чтобы включить функцию сервера администрирования, и добавьте аннотацию @EnableDiscoveryClient, чтобы включить клиентскую функцию eurke.
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run( AdminServerApplication.class, args );
}
}
Построить админ-клиент
Внесите следующие зависимости в файл pom admin-client.Поскольку 2.1.0 использует webflux, вводятся начальные зависимости webflux, начальные зависимости eureka-client и начальные зависимости привода:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Настройте имя приложения, порт, адрес, зарегистрированный в реестре, и все порты, которые выставляют привод в файле конфигурации проекта.
spring:
application:
name: admin-client
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
server:
port: 8762
Добавьте аннотацию @EnableDiscoveryClie в класс запуска, чтобы включить функцию DiscoveryClient.
@SpringBootApplication
@EnableDiscoveryClient
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run( AdminClientApplication.class, args );
}
}
Запустите три проекта одновременно, посетите localhost:8769 в браузере, и браузер отобразит тот же интерфейс, что и в предыдущем разделе.
Интеграция весенней безопасности
В версии 2.1.0 панель инструментов hystrix удалена, а интерфейс входа в систему по умолчанию интегрирован в модуль безопасности Spring.Пока добавлена защита Spring, модуль входа интегрирован.
Нужно только изменить проект admin-server, в файле pom проекта admin-server нужно ввести следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Настройте имя пользователя и пароль весенней безопасности в файле конфигурации application.yml рабочего администратора-сервера, В это время вам необходимо ввести информацию о карте метаданных при регистрации службы следующим образом:
spring:
security:
user:
name: "admin"
password: "admin"
eureka:
instance:
metadata-map:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
Напишите класс конфигурации SecuritySecureConfig для наследования WebSecurityConfigurerAdapter, конфигурация выглядит следующим образом:
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter( "redirectTo" );
http.authorizeRequests()
.antMatchers( adminContextPath + "/assets/**" ).permitAll()
.antMatchers( adminContextPath + "/login" ).permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage( adminContextPath + "/login" ).successHandler( successHandler ).and()
.logout().logoutUrl( adminContextPath + "/logout" ).and()
.httpBasic().and()
.csrf().disable();
// @formatter:on
}
}
Перезапустите стартовый проект и зайдите в браузере:http://localhost:8769/ будет перенаправлен на интерфейс входа в систему. Имя пользователя и пароль для входа настраиваются в файле конфигурации, admin и admin соответственно. Интерфейс отображается следующим образом:
Встроенная функция сигнализации почтового ящика
В spring boot admin также может быть интегрирована функция оповещения почтового ящика.Например, если служба неработоспособна или отключена, вы можете отправлять электронные письма на указанный почтовый ящик. Интеграция очень простая, нужно только преобразовать админ-сервер:
В файле Pom проекта admin-server, плюс стартовые зависимости почты, код такой:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
В файле конфигурации application.yml вам необходимо настроить конфигурацию, связанную с почтой, следующим образом:
spring.mail.host: smtp.163.com
spring.mail.username: miles02
spring.mail.password:
spring.boot.admin.notify.mail.to: 124746406@qq.com
После завершения вышеуказанной конфигурации, когда статус нашего зарегистрированного клиента изменится с UP на OFFLINE или другой статус, сервер автоматически отправит электронное письмо на адрес, указанный выше.
Загрузка исходного кода
Быстрый старт:GitHub.com/forephotos/День SP…
В сочетании с весенним облаком:GitHub.com/forephotos/День SP…
использованная литература
codecentric.GitHub.IO/spring-boot…
Сканируй и поддержи автора
(Просьба указывать автора и источник при перепечатке статей с этого сайтаБлог Фан Чжипэна)