微服务监控
微服务架构引入的一个首要问题就是运维问题,由于服务节点众多,怎样才能监控所有微服务节点的运行状况成为一个难题,开发或运维人员不可能再按照传统的方式登录到每个服务器去观察问题。
通过注册中心可以感知到整个微服务的所有节点,只要每个微服务都提供相应的监控接口即可。例如,Spring Boot Actuator提供了大量的监控端点(接口),可以针对内存、CPU、环境变量、GC、线程等进行全方位的监控。
在Spring Boot 1.x项目下访问/env接口,在Spring Boot 2.x项目下访问/actuator/env接口,就可以查询项目的各种环境信息,包括系统环境变量、项目配置文件、默认参数、系统属性、系统端口配置等内容,如图3-33所示。
图3-33 /actuator/env监控端点应答结果
Spring Boot Actuator的监控端点主要分为以下三大类。
(1) 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
(2) 度量指标类:获取应用程序运行过程中用于监控的度量指标,如内存信息、线程池信息、HTTP请求统计、GC垃圾收集等。
(3) 操作控制类:提供了对应用的关闭、修改日志级别等操作类功能。
如果使用Spring Cloud微服务体系,则可以使用Spring Boot Admin 作为监控工具,只需要接入注册中心,就可以对整个微服务集群进行监控,无任何侵入性,部署和使用都十分方便(2.x版本支持中文)。可以针对每个微服务的内存、线程、GC、CPU、JVM、环境信息、配置信息等进行全方位的监控,Spring Boot Admin控制台如图3-34所示。
图3-34 Spring Boot Admin控制台
使用工具不是目的,目的是要通过其设计原理来获得启发。Spring Boot Admin从注册中心获取各个微服务的IP地址和端口信息,然后定时调用各个微服务的Actuator监控端口就可以获取到其具体的运行状况信息,再以可视化的管理系统展示出来。同时,通过与Eureka之间的注册表同步,就可以监控每个服务的上线及下线,并发出通知,Spring Boot
Admin 监控原理如图3-35所示。
图3-35 Spring Boot Admin 监控原理
设计思考:监控系统设计的核心是什么?
监控系统一般采用推模式(Push Model)、拉模式(Pull Model)或混合模式(Mix Model)。
监控系统推模式架构如图3-36所示,由监控系统提供服务接口,各个系统采用定时异步的方式向监控系统主动上报自己的运行状况,包括自己的磁盘、内存、CPU、I/O、GC、线程等各方面情况。监控系统收到之后会进行记录、整理、分析,最后以图表、仪表盘等形式展现出来。
图3-36 监控系统推模式架构
监控系统拉模式架构如图3-37所示,与推模式正好相反,由各服务节点提供接口,由监控系统采用定时异步的方式主动调用各系统的监控接口,获取各节点的运行状况,与Spring Boot Admin和Spring Boot
Actuator的组合模式相同。
图3-37 监控系统拉模式架构
混合模式就是同时采用推模式和拉模式的组合。