Статьи

Spring Boot Admin — интерфейс администратора для администрирования приложений весенней загрузки

В рамках развития микросервисов многие из нас используют Spring Boot вместе с функциями Spring Cloud. В мире микро сервисов у нас будет много приложений Spring Boot, которые будут работать на одном и том же / разных хостах. Если мы добавим Spring Actuator в приложения Spring Boot, мы получим множество готовых конечных точек для мониторинга и взаимодействия с приложениями Spring Boot. Список приведен ниже.

МНЕ БЫ Описание Чувствительный по умолчанию
actuator Предоставляет «страницу обнаружения» на основе гипермедиа для других конечных точек. Требует Spring HATEOAS, чтобы быть на пути к классам. правда
auditevents Предоставляет информацию о событиях аудита для текущего приложения. правда
autoconfig Отображает отчет по автоматической настройке, в котором показаны все кандидаты для автоматической настройки и причина, по которой они «были» или «не были» применены. правда
beans Отображает полный список всех компонентов Spring в вашем приложении. правда
configprops Отображает сопоставленный список всех @ConfigurationProperties . правда
dump Выполняет дамп потока. правда
env Выставляет свойства из Spring’s ConfigurableEnvironment . правда
flyway Показывает любые миграции базы данных Flyway, которые были применены. правда
health Показывает информацию о работоспособности приложения (когда приложение защищено, простой «статус» при доступе через неаутентифицированное соединение или полную информацию о сообщении при аутентификации). ложный
info Отображает произвольную информацию о приложении. ложный
loggers Показывает и изменяет конфигурацию регистраторов в приложении. правда
liquibase Показывает любые миграции базы данных Liquibase, которые были применены. правда
metrics Показывает информацию о метриках для текущего приложения. правда
mappings Отображает объединенный список всех путей @RequestMapping . правда
shutdown Позволяет корректно завершить работу приложения (по умолчанию не включено). правда
trace Отображает информацию трассировки (по умолчанию последние 100 HTTP-запросов). правда

Вышеуказанные конечные точки дают много информации о приложении Spring Boot. Но если у вас много запущенных приложений, тогда мониторинг каждого приложения путем попадания в конечные точки и проверки ответа JSON является утомительным процессом. Чтобы избежать этого, команда Code Centric придумала модуль администрирования Spring Boot, который предоставит нам панель администратора Admin UI для администрирования приложений Spring Boot. Этот модуль обрабатывает данные от конечных точек привода и дает представление обо всех зарегистрированных приложениях на одной панели. Теперь мы продемонстрируем возможности Spring Boot Admin в следующих разделах.

В качестве первого шага создайте приложение Spring Boot, которое мы создадим как серверный модуль Spring Boot Admin, добавив приведенные ниже зависимости maven.

01
02
03
04
05
06
07
08
09
10
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
    <version>1.5.1</version>
</dependency>

Добавьте конфигурацию Spring Boot Admin Server, добавив @EnableAdminServer в вашу конфигурацию.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package org.samrttechie;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
import de.codecentric.boot.admin.config.EnableAdminServer;
 
@EnableAdminServer
@Configuration
@SpringBootApplication
public class SpringBootAdminApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminApplication.class, args);
    }
 
    @Configuration
    public static class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // Page with login form is served as /login.html and does a POST on /login
            http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll
            // The UI does a POST on /logout on logout
            http.logout().logoutUrl("/logout");
            // The ui currently doesn't support csrf
            http.csrf().disable();
 
            // Requests for the login page and the static assets are allowed
            http.authorizeRequests()
            .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
            .permitAll();
            // ... and any other request needs to be authorized
            http.authorizeRequests().antMatchers("/**").authenticated();
 
            // Enable so that the clients can authenticate via HTTP basic for registering
            http.httpBasic();
        }
    }
    // end::configuration-spring-security[]
 
}

Давайте создадим больше приложений Spring Boot для мониторинга через сервер администрирования Spring Boot, созданный на предыдущих этапах. Все приложения Spring Boot, которые будут созданы сейчас, будут действовать как клиенты Spring Boot Admin. Чтобы сделать приложение клиентом администратора, добавьте приведенную ниже зависимость вместе с зависимостью исполнительного механизма. В этой демонстрации я создал три приложения, таких как Eureka Server, Customer Service и Order Service.

1
2
3
4
5
6
7
8
9
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Добавьте ниже свойство в файл application.properties. Это свойство указывает, где работает сервер администрирования Spring Boot. Следовательно, клиенты будут регистрироваться на сервере.

1
spring.boot.admin.url=http://localhost:1111

Теперь, если мы запустим Сервер администрирования и другие приложения Spring Boot, мы сможем увидеть всю информацию о клиентах администратора на панели инструментов Сервера администрирования. Когда мы запустили наш сервер администратора на порту 1111 в этом примере, мы можем увидеть панель мониторинга по адресу http: // <host_name>: 1111. Ниже приведен скриншот пользовательского интерфейса Admin Server.

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

Теперь мы увидим еще одну функцию под названием уведомления от Spring Boot Admin. Это будет уведомлять администраторов, когда статус приложения ВНИЗ или статус приложения повышается. Администратор Spring Boot поддерживает следующие каналы для уведомления пользователя.

  • Уведомления по электронной почте
  • Pagerduty Уведомления
  • Hipchat Уведомления
  • Slack Уведомления
  • Давайте общаться уведомления

В этой статье мы настроим Slack-уведомления. Добавьте указанные ниже свойства в файл application.properties Сервера администрирования Spring Boot.

1
2
spring.boot.admin.notify.slack.webhook-url=https://hooks.slack.com/services/T8787879tttr/B5UM0989988L/0000990999VD1hVt7Go1eL //Slack Webhook URL of a channel
spring.boot.admin.notify.slack.message="*#{application.names *#{to.status}*" //Message to appear in the channel

С помощью Spring Boot Admin мы управляем всеми приложениями. Таким образом, нам нужно защитить Spring Boot Admin UI с помощью функции входа. Давайте включим функцию входа на сервер администрирования Spring Boot. Здесь я иду с базовой аутентификацией. Добавьте ниже зависимости maven к модулю Admin Server.

1
2
3
4
5
6
7
8
9
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-login</artifactId>
    <version>1.5.1</version>
</dependency>

Добавьте следующие свойства в файл application.properties.

1
2
security.user.name=admin //user name to authenticate
security.user.password=admin123 //Password to authenticate

Поскольку мы добавили безопасность на сервер администратора, клиенты администратора должны иметь возможность подключаться к серверу путем аутентификации. Следовательно, добавьте следующие свойства в файлы application.properties клиента Admin.

1
2
spring.boot.admin.username=admin
spring.boot.admin.password=admin123

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