Java Springboot应用监控保姆级教程

86 阅读2分钟

1.前言

Spring Boot 官方提供了应用监控,也就是Spring Boot Actuator,它包含了许多功能,例如健康检查、审计、指标收集、HTTP 请求追踪等,程序运行过程中 Spring Boot Actuator 将信息收集起来后,通过 HTTP 和 JMX 两种方式暴露给外部。例如通过访问 /health路径,可以看到应用的健康信息,但是这些端点返回的数据是 JSON 格式的,不方便查看,也不方便分析,所以Spring Boot Actuator 要和一些外部模块一起使用,

要么自己手写一个UI界面,通过暴露的应用信息,做可视化展示。自己手写很麻烦,而民间有人就开源了这种UI,就是springboot Admin

springboot Admin的结构如下

配置一个java程序作为springboot admin-server,server接收各个应用的监控信息并可视化处理

各个应用只需要告诉server自己的端口和地址,server即可读取其信息并展示。这些应用也可以称作:springboot admin-client

2.创建springboot-admin-server

2.1.maven依赖
    <!-- web启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
​
    <!-- admin-server -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.3.0</version>
    </dependency>
2.2.配置权限控制,通过账号密码才能访问可视化页面
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 org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
​
@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/**"
                );
    }
}
2.3.配置账号密码
server.port=9760
spring.security.user.name=admin
spring.security.user.password=123456
2.4.启动类增加注解
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
@EnableAdminServer
public class ServerMain {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoMain.class, args);
    }
}
2.5.启动后,访问server的页面,输入账号密码后,可以看到目前没有应用注册过来,列表为空

3.配置一个springboot应用作为client,发送健康信息到server,server进行可视化展示

3.1.maven依赖
    <!-- web启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
​
    <!-- admin-client -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.3.0</version>
    </dependency>
3.2.添加application.properties配置文件
server.port=9770#在server页面中显示的应用名称
spring.application.name=yuchen-admin-sys
​
#配置server的地址、账号密码,才能正常认证
spring.boot.admin.client.url=http://localhost:9760
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=123456#配置所有监控接口都对外访问
management.endpoints.web.exposure.include=*
2.3.启动类无需添加其他注解,直接启动,当出现regist说明已注册到server

此时再访问server的页面,可以看到应用的具体信息了,在应用墙中点击这个应用,可以进入到详情

把应用停止后,在事件日志中也可以看到停止时间