SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据
简介
上篇文章中讲了使用hystrix实现容错,除此之外,hystrix还提供了近乎实时的监控。本文将介绍如何进行服务监控以及使用hystrix dashboard来让监控数据图形化。
项目介绍
- sc-parent,父模块(请参照springcloud学习笔记(1):eureka注册中心)
- sc-eureka,注册中心(请参照springcloud学习笔记(1):eureka注册中心)
- sc-consumer-hystrix-ribbon,使用hystrix+ribbon的消费者(请参照springcloud学习笔记(4):hystrix容错机制)
- sc-consumer-hystrix-feign,使用hystrix+feign的消费者(请参照springcloud学习笔记(4):hystrix容错机制)
- sc-hystrix-dashboard,用于可视化监控数据
- sc-turbine,用于聚合监控数据
开启消费者服务监控
1.修改消费者sc-consumer-hystrix-ribbon和sc-consumer-hystrix-feign的pom.xml,新增如下依赖:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
2.修改消费者sc-consumer-hystrix-ribbon和sc-consumer-hystrix-feign的application.yml,新增如下配置:
management: endpoints: web: exposure: include: 'hystrix.stream' #暴露hystrix.stream端点
3.测试访问消费者sc-consumer-hystrix-feign的监控数据
依次启动注册中心sc-eureka和消费者sc-consumer-hystrix-feign,并访问http://localhost:8084/actuator/hystrix.stream,结果显示如下:
出现上图是因为消费者服务没有被访问,所以这里先调用下消费者服务:http://localhost:8084/feign/getbooklist,然后再访问http://localhost:8084/actuator/hystrix.stream:
可以看到监控数据是以文字的形式展示的,并不直观,下面将介绍使用hystrix dashboard可视化监控数据。
使用hystrix dashboard可视化监控数据
1.在父模块下创建子模块项目sc-hystrix-dashboard,pom.xml:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-hystrix-dashboard</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-hystrix-dashboard</artifactid> </dependency> </dependencies> </project>
2.创建启动类dashboard.dashboardapplication:
package dashboard; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.hystrix.dashboard.enablehystrixdashboard; @springbootapplication @enablehystrixdashboard public class dashboardapplication { public static void main(string[] args) { springapplication.run(dashboardapplication.class, args); } }
3.创建application.yml:
server: port: 8086 spring: application: name: sc-hystrix-dashboard
4.测试
启动sc-hystrix-dashboard后,访问http://localhost:8086/hystrix将会显示hystrix dashboard的主界面:
然后需要将消费者sc-consumer-hystrix-feign的监控数据添加到hystrix dashboard中。依次启动注册中心sc-eureka和消费者sc-consumer-hystrix-feign,将监控数据的地址输入到hystrix dashboard主界面的文本框中,点击monitor stream,然后重复访问消费者服务http://localhost:8084/feign/getbooklist,hystrix dashboard显示如下:
关于界面上指标表示的内容可以参考下图:
使用turbine聚合监控数据
/hystrix.stream端点只能监控到单个服务实例,如果需要查看其他服务实例监控信息则需要在hystrix dashboard切换想要监控的地址。通过turbine可以将所有/hystrix.stream端点的数据聚合到一个组合的/turbine.stream中,然后在hystrix dashboard中就可以查看所有服务的监控信息。
1.修改消费者sc-consumer-hystrix-ribbon和sc-consumer-hystrix-feign的application.yml,将registerwitheureka设为true或者直接去掉该配置(默认为true)。因为turbine需要从eureka上获取服务的地址信息,然后才能获取到服务的监控数据,所以消费者服务需要到eureka注册中心注册。
eureka: client: #registerwitheureka: false serviceurl: defaultzone: http://localhost:8080/eureka/
2.在父模块下创建子模块项目sc-turbine,pom.xml:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-turbine</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-turbine</artifactid> </dependency> </dependencies> </project>
3.创建启动类turbine.turbineapplication:
package turbine; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.turbine.enableturbine; @springbootapplication @enableturbine public class turbineapplication { public static void main(string[] args) { springapplication.run(turbineapplication.class, args); } }
4.创建application.yml:
server: port: 8087 spring: application: name: sc-turbine eureka: client: registerwitheureka: false serviceurl: defaultzone: http://localhost:8080/eureka/ turbine: appconfig: sc-consumer-hystrix-ribbon,sc-consumer-hystrix-feign #指定要监控的服务名 clusternameexpression: "'default'"
5.测试
依次启动注册中心sc-eureka、消费者sc-consumer-hystrix-feign、消费者sc-consumer-hystrix-ribbon、sc-turbine、sc-hystrix-dashboard,访问http://localhost:8086/hystrix进入到hystrix dashboard主界面中,然后在hystrix dashboard主界面的文本框中输入http://localhost:8087/turbine.stream,点击monitor stream进入监控界面,重复访问两个消费者服务,监控界面上将显示两个消费者的监控信息: