概述
- Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示,常常辅助我们开发人员快速查看服务运行状态
- 在微服务架构中,Spring Boot Admin通常作为一个独立的微服务运行,作为监控服务端可以单独部署和启动
- 但在我们公司内部微服务架构中,我们使用Spring Boot Admin与Eureka注册中心进行集成,以便自动发现并监控注册在Eureka中的服务实例。这种集成方式可以减少对客户端应用的单独配置,实现更加自动化和集中化的监控管理
监控功能
- 显示应用程序的监控状态
- 应用程序上下线监控(部署过50+应用到正式环境时用于确定应用是否发布成功)
- 查看 JVM,线程信息(遇到OOM时使用过)
- 可视化的查看日志以及下载日志文件
- 动态切换日志级别
- Http 请求信息跟踪
- 其他功能点……
项目实战
创建一个标准的springboot项目
pom添加依赖
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>版本号</version>
</dependency>
yml配置Spring Boot Admin Server属性
bootstrap/application.yml配置SpringBoot Admin Server属性:端口号,服务名,用户登录信息等
# 端口
server:port: 90040
spring:application:name: monitor-server# config client 配置中心configprofiles:active: prodcloud:config:fail-fast: trueusername: configpassword: cofinglabel: trunkprofile: ${spring.profiles.active} #prod # 取哪個版本的配置文件#uri: http://localhost:9090/ # Config Server URI, 无Eureka Server才需要配置discovery:enabled: trueservice-id: cdp-config-serverinetutils:ignored-interfaces: # 配置Eureka Client註冊到Eureka服務器時,需要忽略的網卡清單。僅針對運行環境(主機)存在多網卡的情景。- "docker.*" # 忽略并避免使用docker網卡IP註冊- "veth.*" # 忽略并避免使用docker環境下容器的虛擬網卡- "virbr0" # 忽略并避免使用 KVM創建的提供NAT模式網卡IP註冊 - "kbr0" # 忽略并避免使用自定義的基於OpenvSwitch技術構建的docker物理主機通信虛擬網IP註冊- "VMware.*" # 忽略并避免使用vmware網卡IP註冊main:allow-bean-definition-overriding: truemanagement:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS# 和Eureka instance进行集成
eureka:instance:prefer-ip-address: trueinstance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}# 注意:如果应用存在上下文,则必须设置health-check-url-path和status-page-url-path#health-check-url: http://${spring.cloud.client.ip-address}:${server.port}${server.servlet.context-path}/actuator/healthhealth-check-url-path: /actuator/health#status-page-url: http://${spring.cloud.client.ip-address}:${server.port}${server.servlet.context-path}/actuator/infostatus-page-url-path: /actuator/infohome-page-url-path: /metadata-map:management:context-path: /actuator # spring boot admin获取客户端的默认端点路径前缀为"/actuator":因为客户端有上下文路径,故需要通过eureka client告知admin serveruser: # 如果不配置则无法获取 /actuator/health信息,提示401name: monitor #SpringBootAdmin本身作为一个Eureka客户端被发现,这里由于SpringBootAdmin需要进行登录,因此,此处配置SpringBootAdmin登录时使用的用户名password: monitor2024.--- # prod为正式Docker配置环境,使用"---"间隔不同环境
spring:profiles: prod
eureka:client:serviceUrl: defaultZone: http://admin:admin.@peer1:8761/eureka/,http://admin:admin.@peer2:8762/eureka/ # 高可用地址
在config配置中心动态拉取springboot admin服务应用对应的配置文件信息:
spring:# 安全配置security:user:name: monitor# password: ENC(YTz0WOWB8fm4wvHNRsjKoHxFNo3T64D1)password: monitor2024.#jasypt 正式环境需要加密,对应ENC(YTz0WOWB8fm4wvHNRsjKoHxFNo3T64D1)
#jasypt:#encryptor:#password: monitor2024 # 密钥盐/passsword salt
创建启动类
package com.monitor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import de.codecentric.boot.admin.server.config.EnableAdminServer;/*** * @ClassName: MonitorApplication* @Description: 应用监控服务端启动类* @author test**/
@SpringBootApplication
@EnableAutoConfiguration
@EnableAdminServer
@EnableDiscoveryClient
@EnableEncryptableProperties
public class MonitorApplication {public static void main( String[] args ){SpringApplication.run(MonitorApplication.class, args);}
}
启动主启动类
Spring Boot Admin Server启动后,通过http:localhost(或者部署的服务器IP):90040/,随后输入正确登录用户信息(monitor/monitor2024),验证通过后我们就可以查看已经正常启动的服务以及对应的运行状态等信息~