Spring-boot-admin功能说明
1. 准备
1.1 介绍
spring-boot-admin 的 Github 源码地址:https://github.com/codecentric/spring-boot-admin
在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面,提供如下功能:
显示 name/id 和版本号
显示在线状态
Logging 日志级别管理
JMX beans 管理
Threads 会话和线程管理
Trace 应用请求跟踪
应用运行参数信息,如:
Java 系统属性
Java 环境变量属性
内存信息
Spring 环境属性
1.2 组成部分
Spring-boot-admin 由服务器端和客户端组成
服务器端配置 (gradle 工程):
build.gradle:compile("de.codecentric:spring-boot-admin-server:1.4.1")
compile("de.codecentric:spring-boot-admin-server-ui:1.4.1")
application.properties:server.port= 8090 (自定义)
spring.application.name=Spring Boot Admin Web (自定义)
spring.boot.admin.url=http://localhost:${server.port}(自定义)
spring.jackson.serialization.indent_output=true
endpoints.health.sensitive=false
info.version=1.0.0(自定义)
启动 spring-boot 项目时需要加上 @SpringBootApplication 和 @EnableAdminServer 标签
客户端配置 (gradle 工程):
build.gradle:compile("de.codecentric:spring-boot-admin-starter-client:1.4.1")
application.properties:
spring.application.name=spring-boot-admin-client (自定义)
spring.boot.admin.url=http://localhost:8090(注册到 server)
server.port=8080(自定义)
info.version=1.0.0 (自定义)
spring-boot-admin-server:服务器后端处理逻辑代码
spring-boot-admin-server-ui:前端界面展示
spring-boot-admin-starter-client:客户端,需要添加到 spring-boot 项目中
2. 工作原理
2.1 客户端注册
客户端启动后会实例化RegistrationApplicationListener,listener 默认会每隔 10s 到服务端去注册下,如果已经存在,会 refresh
具体代码如下:
在跟服务器注册之前,客户端会先实例化 Application 信息,获取相应的信息,然后通过 restful http post 请求跟服务器交互
服务端代码逻辑:服务器端首先会根据客户端的 HealthUrl,通过 SHA-1 算法得到客户端的 id 值,借此区分不同的客户端节点
获取到客户端 id 后,从服务端保存的 ConcurrentHashMap 对象中,根据 id 获取客户端状态信息,如果存在状态信息,则 refresh 或者 replace,否则往 map 中新加客户端信息
2.2 路由
客户端注册到服务端,会由服务端维护一层路由映射,会在路径上添加前缀、客户端 id 和后缀,默认前缀为:/api/applications 后缀:/**
Mapped URL path [/api/applications/73abdba9/health/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/env/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/metrics/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/trace/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/dump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/jolokia/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/info/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/activiti/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/logfile/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/refresh/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/flyway/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/liquibase/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/heapdump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
73abdba9 为客户端的id 值
具体代码如下:
具体的路由信息如下:
route matched=Route(id=73abdba9-health, fullPath=/api/applications/73abdba9/health/**,path=/**,location=http://pc-PC:8090/health,prefix=/api/applications/73abdba9/health, retryable=false, sensitiveHeaders=[],customSensitiveHeaders=false)
包含请求的路径,以及具体节点的实际访问路径 (location)
2.3 具体请求执行路径
用户触发界面 -> 界面发起请求 (带有具体的客户端 id) -> 经过服务器端路由映射 -> 具体节点的访问路径 -> 调用 Spring Boot Autuator 监控接口获取数据返回
界面代码:
经过测试发现 health 接口,默认每隔 20 秒都会触发一次,其它接口只有刷新后才会触发接口调用,也许 health 被设计成心跳连接(猜测)
3.Spring Boot Autuator 监控
Spring boot autuator 提供很多的 Endpoints 访问
endpoints = {"env", "metrics","trace", "dump", "jolokia", "info","activiti", "logfile", "refresh","flyway", "liquibase", "heapdump"};
endpoints 说明以及自定义:
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html