Spring Boot管理员教程



在Spring Boot Actuator端点之上,通过漂亮的用户界面控制和管理Spring Boot应用程序。

弹簧启动器


Actuator是一个Spring Boot模块,它将REST / JMX端点添加到您的应用程序中,因此您可以在生产环境中轻松跟踪和管理它。 端点提供运行状况检查,指标监视,对日志,线程转储,堆转储,环境信息等的访问。 在下面的文章中,作者详细介绍了执行器:
执行器:弹簧靴生产监控和管理
使用Spring Boot Actuator 2.x监视和管理正在运行的应用程序。 收集指标或检查应用程序的运行状况。

译者注意。 关于哈布雷有类似的文章:
弹簧启动执行器简介

春季启动管理员


Actuator是一个强大的功能强大的工具,此外,它的端点易于与其他应用程序一起使用-您只需使用REST服务调用即可。 但是,使用执行器对人来说不是很方便。 用户拥有一个良好的用户界面非常容易,您可以使用它来查看所有监视数据和管理您的应用程序。 这正是Spring Boot Admin服务的内容。 它在Actuator端点的顶部为您提供了一个方便的用户界面层,并在此之上提供了一些额外的功能。

Spring Boot Admin不是Spring团队提供的模块,它是由一家名为Codecentric的公司创建的。 但是,其代码可在Github上公开获得,并且是免费的。

客户端和服务器


与Actuator不同,Spring Boot Admin实际上由两部分组成-客户端和服务器。

服务器部分包含管理员用户界面,并且独立于受监视的应用程序工作。 客户端部分位于受监视的应用程序中,该应用程序已在服务器部分中注册。

因此,即使我们的应用程序无法运行或无法正常运行,监视服务器仍在运行。 现在,假设您有多个应用程序(例如Spring Boot微服务),并且每个应用程序都可以在多个实例中工作。 使用传统的执行器监视,这很困难,因为您需要分别访问每个执行器,并且需要跟踪多少个实例以及它在哪里运行。

使用Spring Boot Admin时,受监视的应用程序(客户端)的每个实例在启动后都会在服务器上注册。 然后,您只有一个点(Admin Server),可以在其中检查所有这些点。



源代码


可以在此Github存储库中找到完成的应用程序的源代码。

服务器设置


首先让我们看一下如何配置Spring Boot Admin Server。 让我们从新的Spring Boot应用程序开始。 您可以使用Spring Initializr轻松创建它。 确保启用Web模块。

创建项目后,我们需要做的第一件事是添加Spring Boot Admin Server依赖项:

<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency> 

请注意,尽管该项目不是由Pivotal创建的,但是您可以在Spring Initializr中找到Spring Boot Admin的客户端和服务器模块。 接下来,我们需要通过使用@EnableAdminServer批注注释主应用程序类来启用Admin Server:



仅此而已。 现在,您可以启动您的应用程序,并且在打开页面之后,您应该会看到类似以下的屏幕:



服务器正在运行,但是客户端尚未注册。 让我们修复它。

客户端设置


与服务器设置一样,第一步是向现有应用程序添加正确的依赖项:

 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency> 

然后,您需要确定Admin Server运行所在的URL。 将此行添加到application.properties文件中:

 spring.boot.admin.client.url=http://localhost:8080 

添加执行器


现在,您应该能够启动客户端和服务器。 只需确保没有端口冲突,因为两个应用程序默认都使用8080,为了进行测试,可以在application.properties中设置server.port = 0 ,以便客户端在启动时使用随机端口。 因此,您可以测试在不同端口上运行的多个实例的启动。

打开Admin Server用户界面时,应该会看到您的应用程序。 当您单击应用程序的名称时,将出现一个包含有关应用程序信息的页面。



如果您看到的屏幕与上述屏幕相似,且信息量很少,则表明您的项目没有执行器。 请记住,Spring Boot Admin在后台使用Actuator端点。 幸运的是,您只需要添加一个简单的依赖项,其余部分就由自动配置完成。

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

但是,默认情况下,大多数端点不会显示在Actuator中。 您需要在application.properties中更改配置以公开它们:

 management.endpoints.web.exposure.include=* 

提供了Actuator端点之后,您应该在管理界面中看到更多信息:



可以在本文中找到有关如何配置Spring Boot Actuator的详细指南。
译者注意。有关哈布雷文章中

安全性


现在一切正常,我们需要确保并非所有人都可以访问我们的Actuator端点和管理界面。

客户安全


如果您已经在使用Spring Security,那么以上内容将对您不起作用,因为默认情况下驱动器端点受保护,并且您的管理员服务器将无法访问它们。 如果尚未使用Spring Security,则首先需要添加依赖项:

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

为了进行测试,您可以使用management.security.enabled = false暂时禁用Actuator端点安全性。 但是,我们希望启用安全性。 如果使用基本身份验证,则只需在属性文件中指定用户名和密码。 管理服务器将使用这些凭据在客户端驱动器的端点进行身份验证:

 spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password 

默认情况下,除非另有配置,否则Spring Boot默认情况下使用用户用户,并在每次应用程序启动时自动生成密码。 您可以在启动期间在控制台中验证密码。 如果要显式指定应用程序所需的用户名和密码,则可以在属性中指定它们:

 spring.security.user.name=joe spring.security.user.password=my-secret-password 

服务器安全性


与客户端一样,我们需要添加一个Spring Security依赖项:

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

现在,让我们在application.properties中配置登录到Admin Server所需的用户名和密码:

 spring.security.user.name=admin spring.security.user.password=admin-password 

现在,在您的客户端上,您还需要添加以下凭据,否则他将无法在服务器上注册:

 spring.boot.admin.client.username=admin spring.boot.admin.client.password=admin-password 

现在回到服务器端。 我们需要做的最后一件事是添加Spring Security配置以保护管理员用户界面:

 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl("/"); http.authorizeRequests() .antMatchers("/assets/**").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated().and() .formLogin().loginPage("/login") .successHandler(successHandler).and() .logout().logoutUrl("/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( "/instances", "/actuator/**" ); } } 

这仅提供使用基本HTTP身份验证登录的经过身份验证的用户对管理员界面的访问。 登录页面本身以及包括javascript,HTML和CSS在内的静态用户界面资源均处于打开状态。 否则,您将无法登录。 然后,可以防止基于cookie的跨站点请求(CSRF,跨站点请求伪造)的伪造。 您可以看到CSRF保护中的某些路径被忽略了-这是因为Admin Server当前没有适当的支持

现在,重新启动后,您应该会看到一个漂亮的登录屏幕,可以保护您的Admin Server:



云发现


Spring Boot Admin客户端不是在服务器上注册应用程序的唯一方法。 Admin Server还支持Spring Cloud Service Discovery。 您可以在官方文档中或在文章“ 使用Spring Boot Admin进行Spring Cloud Discovery ”中阅读更多内容。

通知事项


一旦开始监视,您希望在出现问题时得到通知。 好消息是,Spring Admin提供了多种通知选项。

如果这是您第一次访问“管理服务器”页面,它会要求您在计算机上显示推送通知的权限。 每当出现问题时,您都会收到一条弹出消息。



其他通知需要轻松设置。 这通常意味着仅在application.properties中提供一些条目。 当前支持以下服务:


设置电子邮件通知


如果要启用电子邮件通知,则需要将Spring电子邮件依赖项添加到服务器端:

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

然后,您需要确定您的SMTP服务器,该服务器将用于通过电子邮件发送通知和凭据。 更新管理服务器的application.properties

 spring.mail.host=smtp.foo.com spring.mail.username=smtp-server-user spring.mail.password=smtp-server-password 

然后,您需要确定收件人和发件人。

 # Sender email address spring.boot.admin.notify.mail.from="Spring Boot Admin <noreply@foo.com>" # Comma-delimited list of recipient email addresses spring.boot.admin.notify.mail.to=alice@foo.com,bob@bar.com # Comma-delimited list of carbon copy recipient email addresses spring.boot.admin.notify.mail.cc=joe@foo.com 

结论


Spring Boot Admin在Actuator端点的顶部提供了一个方便实用的用户界面层。 此外,它还允许您通过多个实例集中控制多个应用程序,这在云和微服务中工作时非常宝贵。 但是,请确保您已充分保护客户端和服务器。 有关更多信息,请参阅官方文档

Source: https://habr.com/ru/post/zh-CN479954/


All Articles