Spring Cloud(F版)Hystrix仪表盘和Turbine集群监控
在上一篇文章【Spring Cloud(F版)断路器Hystrix】中,简单的介绍了Hystrix的使用,以及结合Feign如何使用Hystrix进行降级处理。在我们生产中,Hystrix断路器是非常实用的,当一个服务提供者出现问题之后,不至于直接将500的错误或者其他不友好的错误信息直接返回给用户,而是通过断路器的降级处理,给出一个友好的提示,提高了用户的体验感。
介绍完Hystrix的使用,我们再来说说这个Hystrix仪表盘,Hystrix仪表盘是根据系统一段时间内发生的请求情况来展示的可视化面板,这些信息能让我们很直观的看到系统运行的情况。
——————————————————————————————————————————————————————
环境搭建
这是我搭建的一个maven多模块的测试项目,如果不知道IDEA如何创建多模块项目的可以看一下【IntelliJ IDEA创建Maven多模块项目】这篇文章。
此项目中,commons是公共类模块,存放实体类、工具类等,是一个普通的java项目,consumers是消费者(Spring Boot项目),这里我创建两个模块分别是移动端和pc端这两个消费者,providers是提供者(Spring Boot项目),同样也创建了用户以及订单两个提供者。
eureka-server则是服务注册中心,这个就不过多讲解了可以看之前的几篇文章。
这里提供者和消费者都需要引入commons模块的依赖
添加依赖
我们在消费者consumer-mobile项目中,添加以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
添加配置信息
management:
endpoints:
web:
exposure:
include:
- hystrix.stream
搭建仪表盘项目
创建一个新的项目hystrix-dashboard,不清楚如何创建项目的可以查看【IDEA 社区版 创建spring cloud项目】这篇文章。
添加依赖:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.clarezhou.example</groupId>
<artifactId>hystrix-dashboard</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hystrix-dashboard</name>
<description>断路器仪表盘</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
添加注解
在主程序入口,添加@EnableHystrixDashboard,开启仪表盘。
package com.clarezhou.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
/**
* @author clarezhou
*/
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
添加属性配置
在application.yml中添加属性信息
server:
port: 8200
spring:
application:
name: hystrix-dashboard
启动仪表盘项目
启动hystrix-dashboard项目,然后输入localhost:8200/hystrix,就能看到以下界面。
分别启动eureka-server项目,provider-user项目,consumer-mobile项目
然后在浏览器中输入:http://localhost:8101/actuator/hystrix.stream 可以看到打印以下信息。
然后在下面输入要监测的服务,然后Monitor Stream。
然后就能看到以下信息,以下是我分别访问了sayHelloByName , getUserInfo ,sayHello1三个接口。
圆圈:实心圆的颜色从绿黄橙红依次递减,表示服务的健康程度依次降低,圆越大,表示服务的流量越大,通过这些颜色,可以快速的发现故障、具体的实例以及请求压力等。
曲线:代表2分钟内流量的变化
圆圈右边的数字:
第一列分别是请求成功的数量,短路/熔断数量,错误的请求数量。
第二列分别是超时的请求数量,线程池拒绝数量,失败的请求数量。
百分比是最近10秒内错误的比率
Host 和 Cluster:机器和集群的请求频率
Circuit :断路器的状态 open/cloused
Hosts Median Mean :百分位的延迟数
Thread Pools : 线程池的指标,核心线程池的指标,队列大小等。
——————————————————————————————————————————————————————
Hystrix dashboard只能监控单体应用,而我们实际应用中都是集群的,单体并不是特别的有用,而Turbine则是集群监控,汇聚所有hystrix.stream流的方案,然后在Hystrix dashboard中显示。
好了,废话不多说,开始搭建例子。
在上面项目的基础上,创建一个新的项目,取名为turbin-server,这里如何创建项目就不再赘述了。
添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com..clarezhou.example</groupId>
<artifactId>turbine-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>turbine-server</name>
<description>集群监控</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
添加注解
在项目启动入口程序,添加@EnableTurbine和@EnableHystrixDashboard注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
@EnableTurbine
public class TurbineServerApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication.class, args);
}
}
添加配置信息
server:
port: 8300
spring:
application:
name: turbine
security:
user:
name: admin
password: 123456
eureka:
client:
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8081/eureka
turbine:
app-config: consumer-web,consumer-mobile
cluser-name-expression: "default"
combine-host-port: true
turbine.app-config=consumer-web 这个配置是指监控的应用
turbine.cluster-name-expression=”default”,表示集群的名字为default
turbine.combine-host-port=true表示同一主机上的服务通过host和port的组合来进行区分,默认情况下是使用host来区分,这样会使本地调试有问题
还没有评论,来说两句吧...