Spring Boot Admin 监控

简介

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文件

	    >
            >de.codecentric>
            >spring-boot-admin-starter-server>
            >2.2.2>
        >
        >
            >org.springframework.cloud>
            >spring-cloud-starter-netflix-eureka-client>
        >

启动类

@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 监控_第1张图片

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

Spring Boot Admin 监控_第3张图片

添加登录页面

在spring boot amdin 服务端修改

可参考官方示例

pom新增

        >
            >org.springframework.boot>
            >spring-boot-starter-security>
        >

配置文件

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 监控_第4张图片

邮件通知

如果服务下线,会进行邮件通知
在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: [email protected]
    # 授权码,不是密码,在qq邮箱设置-账号里面有生成授权码
    password: ceevfekeeeeeeeee
  boot:
    admin:
      notify:
        mail:
          # 收件人,多个中间用,分隔
          to: [email protected]
          # 发件人
          from: [email protected]

Spring Boot Admin 监控_第5张图片

重启服务,然后将一个客户端关闭
Spring Boot Admin 监控_第6张图片

你可能感兴趣的:(后端开发)