微服务健康监控——指标可视化
- 主要功能
- 开启Spring Boot Actuator监控
- 开启Spring Boot Admin可视化
- 查看监控效果
主要功能
结合Spring Boot Actuator提供的指标信息,对微服务运行状态进行可视化监控管理。
提供如下功能:
- 显示 name/id 和版本号
- 显示在线状态
- 下载主日志文件
- 显示详情,如:
- Java 系统属性
- Java 环境变量属性
- 内存信息
- Spring 环境属性
开启Spring Boot Actuator监控
首先需要在提供方(Provider)的pom中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
默认只能查看health和info端点信息,可以通过向application.properties中添加如下配置打开所有信息:
#开启所有端点
management.endpoints.web.exposure.include=*
但shutdown端点仍然保持关闭状态,如果需要打开远程下线服务,还需要添加如下配置:
#开启远程关闭功能
management.endpoint.shutdown.enabled=true
通过http://服务方IP:port/actuator/shutdown以POST方式进行关闭服务,需要注意的是,这里的关闭是指停止提供方的服务器运行,而不是单纯的把状态设置为DOWN,所以,如果开启这个端点,必须增加权限管控,防止被非正常调用导致服务器宕机。
如果只是想让服务暂时下线,可以通过以下配置,调整服务状态为DOWN:
#开启手动控制,上报真正的服务状态
eureka.client.healthcheck.enabled=true
实现一个用于上报服务状态的Service,然后只需要在相关业务类中,根据业务处理情况调用HealthStatusService .setStatus(true|false); 就可以将服务状态设置为DOWN|UP,这时Eureka服务器如果收到服务的状态更新为DOWN,在消费方请求时会将调用请求指向其他提供方,而当服务状态再次更新为UP时,Eureka会重新保持服务可用。
@Service
public class HealthStatusService implements HealthIndicator{
private Boolean status = true;
public void setStatus(Boolean status) {
this.status = status;
}
public String getStatus() {
return this.status.toString();
}
@Override
public Health health() {
if(status)
return new Health.Builder().up().build();
return new Health.Builder().down().build();
}
}
还可以通过http://服务方IP:port/actuator/metrics可以查看服务方的指标信息,包括jvm的内存使用量和线程等信息,可以用来监控服务方的运行状态,方便调优。
以下是部分端点信息:
autoconfig
获取应用上下文中创建的所有Bean
configprops
获取应用中配置的属性信息报告
env
获取应用所有可用的环境属性报告
Mappings
获取应用所有Spring Web的控制器映射关系报告
info
获取应用自定义的信息
metrics
返回应用的各类重要度量指标信息,包括jvm的内存使用量和线程等信息,可以用来监控服务方的运行状态,方便调优。Metrics节点并没有返回全量信息,我们可以通过不同的key去加载我们想要的值
Threaddump
1.x中为dump,返回程序运行中的线程信息
开启Spring Boot Admin可视化
首先搭建Spring Boot Admin工程,并在pom中添加如下依赖:
<!-- Admin 服务 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<!-- Admin 界面 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
</dependency>
在启动类中添加声明:
@EnableAdminServer
微服务工程pom中已经添加了Actuator的依赖,所以只需要添加如下依赖:
<!-- Admin 服务 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.1</version>
</dependency>
management.endpoint.health.show-details=always
spring.boot.admin.client.url=http://Admin服务端IP:端口
查看监控效果
启动Spring Boot Admin服务端和需要监控的微服务。
通过浏览器访问Admin服务端页面
查看wallboard:
点击wallboard,可以查看admin-client具体的信息,比如内存状态信息:
查看spring bean的情况: