微服务健康监控——指标可视化

  • 主要功能
  • 开启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/shutdownPOST方式进行关闭服务,需要注意的是,这里的关闭是指停止提供方的服务器运行,而不是单纯的把状态设置为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服务端页面

spring boot 配置nacos 账号密码_服务器

查看wallboard:

spring boot 配置nacos 账号密码_微服务_02

点击wallboard,可以查看admin-client具体的信息,比如内存状态信息:

spring boot 配置nacos 账号密码_微服务_03

查看spring bean的情况:

spring boot 配置nacos 账号密码_spring_04