hystrix的dashboard和turbine监控
当我们的应用程序使用了hystrix后,每个具体的hystrixCommand命令执行后都会产生一堆的监控数据,比如:成功数,失败数,超时数以及与之关联的线程池信息等。既然有了这些监控数据数据,那么我们应该如何进行查看呢?答案当然是通过hystrix dashboard 来进行查看,但hystrix dashboard只能查看单个应用内的服务信息,这个显然是不够的,因此我们需要一个能够将系统内多个服务的监控数据汇总到hystrix dashboard上,这个时候就应该使用turbine.
实现功能
假设我们存在服务消费方 product-consumer 和 order-consumer,且都使用了hystrix
1、查看单个服务的 hystrix dashboard 信息
|- 即 product-consumer 只部署在一台机器上
2、查看单个集群的 hystrix dashboard 信息
|- 即 product-consumer 部署在了多台机器上
3、查看多个集群的 hystrix dashboard 信息
|- 即 product-consumer 和 order-consumer 都部署在了 1台~多台 机器上
4、查看所有集群的 hystrix dashboard 信息
|- 查看这个注册中心中所有的服务消费者的监控数据
前置条件
hystrix dashboard url 的格式
监控图标的指标信息
一、查看单个服务的 hystrix dashboard 的信息
1、代码结构:
2、hystrix dashboard程序的编写 ,注册中心、提供者和消费者略
1、引入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</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-test</artifactId> <scope>test</scope> </dependency> </dependencies>
主要是引入 spring-cloud-starter-netflix-hystrix-dashboard 这个依赖
2、启动上增加 @EnableHystrixDashboard 注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
public class ProductHystrixDashboard8097Application {
public static void main(String[] args) {
SpringApplication.run(ProductHystrixDashboard8097Application.class, args);
}
}
3、配置文件(application.yml)没有什么需要注意的,注册到eureka上即可。
4、运行结果
二、查看单个集群的 hystrix dashboard 信息
1、代码结构
2、服务提供者和注册中心略
3、服务消费者
1、java代码就是一个简单的调用远程服务(略)
2、配置文件的写法
server: port: 8100 eureka: client: service-url: defaultZone : http://${security.user.name}:${security.user.password}@localhost:8761/eureka/ instance: prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port} lease-renewal-interval-in-seconds: 3 lease-expiration-duration-in-seconds: 9 metadata-map: cluster: PRODUCT security: user: name: root password: admin spring: application: name: product-consumer需要注意: eureka.instance.metadata-map.cluster 的值,在 turbine 工程中这个值被使用到了
4、turbine 工程的写法
1、引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、增加 @EnableHystrixDashboard @EnableTurbine 注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
@EnableTurbine
public class ProductHystrixDashboard8101Application {
public static void main(String[] args) {
SpringApplication.run(ProductHystrixDashboard8101Application.class, args);
}
}
3、配置文件的写法
server:
port: 8101
eureka:
client:
service-url:
defaultZone : http://${security.user.name}:${security.user.password}@localhost:8761/eureka/
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}
security:
user:
name: root
password: admin
spring:
application:
name: product-hystrix-turbine-dashboard-8101
logging:
level:
org.hibernate : info
org.hibernate.type.descriptor.sql.BasicBinder : trace
org.hibernate.type.descriptor.sql.BasicExtraator : trace
info:
app:
name: "product-hystrix-turbine-dashboard-8101"
description: "product-hystrix-turbine-dashboard-8101程序"
version: "0.0.1"
turbine:
app-config: product-consumer
aggregator:
cluster-config: PRODUCT
combine-host-port: true
cluster-name-expression: metadata['cluster']
注意:
1、主要最后一段配置是和turbine相关,即 turbine 开头的配置
2、turbine.app-config: 后方写的是服务名,即存在hystrim的服务的spring.application.name的值
3、turbine.aggregator.cluster-config: 需要聚合的集群的名字列表,和服务消费者里面的eureka.instance.metadata-map.cluster的值一致
4、turbine.cluster-name-expression: 获取集群名称的表达式,此处指的是获取元数据cluster的值。
5、 turbine.combine-host-port: 为true 表示可以让同一主机上的服务通过主机名和端口号的组合来进行区分
5、整体代码架构
需要理清上面各个线的对应关系。
6、运行结果
三、查看多个集群的 hystrix dashboard 信息
服务注册中心、服务提供者、服务消费者和单个集群的配置是一样的。
turbine 工程中的yml配置
turbine:
app-config: product-consumer,order-consumer
aggregator:
cluster-config: PRODUCT
combine-host-port: true
cluster-name-expression: metadata['cluster']
app-config: 如果有多个,中间以逗号分隔
cluster-config:如果有多个,中间以都好分隔
hystrix dashboard页面上的访问路径: http://turbine:port/turbine.stream?cluster=[cluster-config中的值]
四、查看所有集群的 hystrxi dashboard 监控信息
服务注册中心、服务提供者、服务消费者和单个集群的配置是一样的。
服务消费者工程不需要 eureka.instance.metadata-map.cluster的配置了。
turbine 工程中的yml配置
turbine:
app-config: product-consumer,order-consumer
combine-host-port: true
cluster-name-expression: "'default'"
app-config:需要聚合的服务名,有多个中间以 逗号 分开
cluster-name-expression 的值修改成 default
hystrix dashboard页面上的访问路径: http://turbine:port/turbine.stream
完整代码
上方四个工程的完整代码如下: https://gitee.com/huan1993/spring-cloud-parent/tree/master/hystrix-dashboard-turbine
本文来自博客园,作者:huan1993,转载请注明原文链接:https://www.cnblogs.com/huan1993/p/15416180.html