欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot Admin 监控

程序员文章站 2022-05-22 08:23:48
...

简介

Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。Spring Boot Admin 提供了很多功能,如显示 name、id 和 version,显示在线状态,Loggers 的日志级别管理,Threads 线程管理,Environment 管理等。

具体有什么好处,有什么作用,官网说的很清楚。github地址

spring boot amdin 的服务端

新增项目gmaya-springbootadmin。作为spring boot amdin 的服务端

pom文件

新增pom文件

	    <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableAdminServer

配置文件

修改application.yml

server:
  port: 9100

spring:
  application:
    name: gmaya-springbootadmin
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
    healthcheck:
      enabled: true # 开启健康检查

# 监控
management:
  endpoints:
    web:
      exposure:
        # 通过HTTP公开所有的端点, 默认是info,health
        include: '*'
  endpoint:
    health:
      # 显示完整信息,#默认是never(简要信息)
      show-details: always

因为是使用的Eureka注册中心,所以不需要单独客户端了, 直接在想要监控的客户端直接暴露端点即可。

客户端修改

比如此时,我想要监控gmaya-wepapi-admin,gmaya-service-admin
只需要在这两个项目的配置类新增

# 监控
management:
  endpoints:
    web:
      exposure:
        # 通过HTTP公开所有的端点, 默认是info,health
        include: '*'
  endpoint:
    health:
      # 显示完整信息,#默认是never(简要信息)
      show-details: always

查看效果

启动注册中心,admin服务端,两个客户端。

注册中心页面
Spring Boot Admin 监控

spring boot admin 页面
Spring Boot Admin 监控
点进去,可以查看服务的详细信息

Spring Boot Admin 监控

添加登录页面

在spring boot amdin 服务端修改

可参考官方示例

pom新增

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

配置文件

spring:
  application:
    name: gmaya-springbootadmin
  security:
    user:
      name: "gmaya"
      password: "gmaya"
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
    healthcheck:
      enabled: true # 开启健康检查
  instance:
    metadata-map:
      user.name: ${spring.security.user.name}
      user.password: ${spring.security.user.password}
     

新增配置类
SecuritySecureConfig,直接将官方给出的示例改造一下拿过来了。

package top.gmaya.gmayaspringbootadmin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

import de.codecentric.boot.admin.server.config.AdminServerProperties;

/**
 * spring boot admin 官网示例 
 * @author GMaya
 * @dateTime 2020/5/9 10:30
 */
@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 {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(this.adminContextPath + "/");

        http.authorizeRequests((authorizeRequests) -> authorizeRequests
            .antMatchers(this.adminContextPath + "/assets/**").permitAll()
            .antMatchers(this.adminContextPath + "/login").permitAll().anyRequest().authenticated())
            .formLogin((formLogin) -> formLogin.loginPage(this.adminContextPath + "/login")
                .successHandler(successHandler))
            .logout((logout) -> logout.logoutUrl(this.adminContextPath + "/logout"))
            .httpBasic(Customizer.withDefaults())
            .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringRequestMatchers(
                    new AntPathRequestMatcher(this.adminContextPath + "/instances",
                        HttpMethod.POST.toString()),
                    new AntPathRequestMatcher(this.adminContextPath + "/instances/*",
                        HttpMethod.DELETE.toString()),
                    new AntPathRequestMatcher(this.adminContextPath + "/actuator/**")));

    }
}

重启,查看效果

Spring Boot Admin 监控

邮件通知

如果服务下线,会进行邮件通知
在spring boot amdin 服务端修改

pom新增

       <!--邮件通知-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-mail</artifactId>
       </dependency>

配置文件application.yml修改

spring:
  application:
    name: gmaya-springbootadmin
  security:
    user:
      name: "gmaya"
      password: "gmaya"
  mail:
    # 发件人使用的qq邮箱服务
    host: smtp.qq.com
    username: aaa@qq.com
    # 授权码,不是密码,在qq邮箱设置-账号里面有生成授权码
    password: ceevfekeeeeeeeee
  boot:
    admin:
      notify:
        mail:
          # 收件人,多个中间用,分隔
          to: aaa@qq.com
          # 发件人
          from: aaa@qq.com

Spring Boot Admin 监控

重启服务,然后将一个客户端关闭
Spring Boot Admin 监控