完整的微服务解决方案应该包含了微服务所涉及的方方面面,从服务的集中式配置,注册中心,断路器,负载均衡,监控 等模块之后面临的一个问题是如何直观的将微服务集群中的各个服务的状态显示给对"CODE"没有感觉的用户来使用.这当让是生产环境中所必要的,尤其对运维人员来说.
幸运的是Spring Boot 生态链中已经实现了基本的微服务管理WEB UI,允许我们更直观的观察微服务的运行状态.
原理:Spring Boot Actuator 模块为监控Spring Boot 应用程序暴露的大量的管理端点[ENDPOINT],开发者以REST UIL方式访问当前应用程序的执行状态,Spring Boot Admin模块基于Actuator 模块 及Spring Cloud Zookeeper 模块自动发现注册在集群中的所有服务节点通过监控其Actuator 模块暴露出的性能衡量接口以WEB UI的方式展示微服务集群中服务的状态.
首先作为一个服务监控中心,我们强烈建议其设计的更加纯粹一点,所以不建议将ADMIN模块和微服务本身糅合在一起,从构建一个独立的服务监控中心开始:
pom文件依赖 ,server 及server-ui为 Admin模块的核心,就是一个Web项目用来处理集群中各个服务的状态信息进行展示.jolokia-core模块可选用于增强JMX监控.zookeeper-discovery 模块用于访问服务注册中心,注: 由于ZK在分布式架构中用的较为普遍故之后的系列文章将接基于ZK作为注册中心,而不在使用eureka.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
</dependencies>
该项目的主程序非常简单,@EnableAdminServer 用于启用Admin模块,@EnableDiscoveryClient 用于服务注册和发现
//启用Admin UI模块
@EnableAdminServer
// 自动发现ZK指定节点下的应用进行监控
@EnableDiscoveryClient
@SpringBootApplication
public class ZkAdminApplication {
public static void main(String[] args) {
SpringApplication.run(ZkAdminApplication.class, args);
}
}
配置文件application.yml,这里需要提及的是默认情况下Actuator 模块暴露的接口部分需要权限验证,这里需要显示的关闭权限验证,对其它需要注册到ZK且被 Admin模块监控的服务也是如此,否则Admin不能获取到服务的状态信息.
management:
security:
#关闭安全验证
enabled: false
spring:
application:
name: zk_admin
cloud:
zookeeper:
enabled: true
connect-string: host1:2181,host2:2181,host3:2181
discovery:
root: /services
#注册当前节点
register: true
至此服务监控中心搭建完毕,我们需要在上述配置文件的ZK中注册若干个服务进行预览.默认的路径为 '/' 示例:http://it:8080
Admin模块部分截图及说明如下:
主控界面:
011.png
单个服务的详情页面,其它不再赘述.
image.pngimage.png
image.png
网友评论