一、认识SpringBoot Admin组件
介绍:Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界
面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。
主要的功能点有:
显示应用程序的监控状态
应用程序上下线监控
查看 JVM,线程信息
可视化的查看日志以及下载日志文件
动态切换日志级别
Http 请求信息跟踪
其他功能点击 https://github.com/codecentric/spring-boot-admin 更多了解 Spring-boot-admin。
单体or分布式服务集成:SpringBoot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端和客户端之间采用http通讯方式实现数据交互;单体项目中需要整合spring-boot-admin-client才能让应用被监控。在SpringCloud项目中,spring-boot-admin-server 是直接从注册中心抓取应用信息,不需要每个微服务应用整合spring-boot-admin-client就可以实现应用的管理和监控。
搭建服务流程说明
admin-server admin 监控服务
admin-order amdin 客户端服务
二、实战案例1、SpringCloud项目集成SpringBoot Admin
2.1、分布式下监控图示
在分布式中,我们需要单独创建一个admin-server服务,若是其想要获取到所有的服务实例信息,那么我们就需要将其注册到注册中心中即可获取到所有的服务信息。
那么此时admin服务如何检测各个实例呢?
那么在针对想要被监控的服务中引入依赖spring-boot-starter-actuator,并且添加management的yaml配置。
2.2、搭建admin-server服务
当前服务环境:SpringBoot:2.3.12.RELEASE、spring-cloud:Hoxton.SR12、spring-boot-admin:2.3.0
添加spring-boot-admin-starter-server依赖以及对应eureka client依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.changlu</groupId> <artifactId>admin-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>admin-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-boot-admin.version>2.3.0</spring-boot-admin.version> <spring-cloud.version>Hoxton.SR12</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- admin-server依赖 --> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-dependencies</artifactId> <version>${spring-boot-admin.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置文件application.yaml:
server: port: 10086 spring: application: name: admin-server eureka: client: service-url: defaultZone: http://localhost:8761/eureka instance: hostname: localhost instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 管理配置 management: endpoints: web: exposure: include: '*' # 暴露所有的监控端点 # 如果一个服务需要被监控 那么就要讲自身的一些情况(一些信息接口)暴露出去
默认是health以及info级别,*表示暴露所有的监控信息。
在启动中添加一个eureka client注册、admin-server服务开启:
@SpringBootApplication @EnableEurekaClient @EnableAdminServer //开启admin服务 public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
测试管理服务
我们运行一个eureka注册中心、两个服务以及一个admin管理服务(也就是admin-server):
额外说明:对于eureka以及user、order都是使用的之前章节案例如下:
接着我来访问监控平台:http://localhost:10086/applications
可以看到此时我们能够查看到eureka注册中心中的服务信息:打x的表示该服务并没有配置admin-client,自然就无法令server与client进行交互以及查看信息了。
如何查看当前admin-server服务的一系列运行状态及信息呢?
点击应用墙:
亮着的表示我们能够查看的实例:
我们来点击``admin-server`服务来进行查看:在面板中我们可以查看对应的线程、内存相关信息,包括左边的性能、环境、配置属性等等,还有jvm等。
2.3、实现admin-server监控User服务
在2.2中我们可以看到目前只能够查看admin-server本身自己的服务信息,对于其他如订单order、user服务都是不行的,那么我们如何能够对其进行监控呢?
我们之前admin-server注册到eureka中,可以拿到所有的服务实例信息,那么现在需要做的就是如何让admin-server与各个服务之间进行交互。
方案:自己搭建的服务来集成spring-boot-starter-actuator,然后配置下即可。
操作如下:
可以看到当前服务包含有user以及order,那么如何让admin-server来进行监控呢?
我们来对user服务进行监控!其实很简单,只需要两个步骤:①引入依赖。②进行配置。
①引入依赖
<!-- 暴露自身检查端点 endPoints 一个依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
②配置文件:application.yaml来添加管理配置
# 添加监控 management: endpoints: web: exposure: include: '*'
接着我们来重启user服务。
接着我们回到admin-server服务监控大屏,可以看到此时USER-SERVICE实例已经亮了:
此时我们也来查看一下,果然也可以监控其相应的信息。
额外:集成spring-boot-starter-actuator的好处
上面案例中对user服务进行了监控,集成了对应的依赖,还有一个好处就是我们能够看到当前服务中所有对外提供的服务接口:
好处:对于一些引入进来的依赖包,若是通过文件去查看暴露的一些接口会很麻烦,集成actuator可以将所有引入依赖jar包中的一些接口都给你暴露,弥补了原本只能进行全局搜索的问题。
如何将某个应用服务被admin来进行监控?引入actuator依赖,然后进行配置,即可在admin中也进行获取!