Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。Turbine通过注册中心获取对应集群下的所有微服务实例,然后依次访问每个实例的/hystrix.stream,并收集和聚合所有节点健康信息
汇总系统内多个服务的数据并显示到Hystrix Dashboard 上
1、引入maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、创建启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableTurbine
public class TurbineServer {
private static Logger logger = LoggerFactory.getLogger(TurbineServer .class);
public static void main(String[] args) {
SpringApplication.run(TurbineServer .class, args);
}
}
注:如果是使用新版的eureka客户端依赖,则无需加上@EnableDiscoveryClient注解
3、配置
server:
port: 7400
spring:
application:
name: ${deploy.servicename}
turbine:
aggregator:
clusterConfig: muse,oxford
appConfig: aaabbb
clusterNameExpression: metadata['cluster']
instanceUrlSuffix:
oxford: /Oxford/hystrix.stream
eureka:
instance:
ipAddress: ${eurekaInstanceIpAddress}
preferIpAddress: true
name: ${deploy.servicename}
metadataMap:
zone: ${eurekaZone}
instanceId: ${deploy.servicename}_${spring.cloud.client.ipAddress}
client:
serviceUrl:
defaultZone: ${eurekaClientServiceUrlDefaultZone}
healthcheck:
enabled: true
4、配置文件turbine参数介绍
1、turbine.aggregator.clusterConfig # 指定聚合哪些集群,多个使用","分割,默认为default。可使用http://.../turbine.stream?cluster={clusterConfig之一}访问 2、turbine.appConfig # 配置Eureka中的serviceId列表,表明监控哪些服务 3、turbine.clusterNameExpression a. clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称 b. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default c. 当clusterNameExpression: metadata['cluster']时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC。即:从客户端的metadata-map的元数据中取key=cluster的值,如果跟上面配置的clusterConfig中的一致才可以访问 4、turbine.instanceUrlSuffix.oxford #由于某些项目配置了context-path,而默认的turbine访问的hystrix.stream是/hystrix.stream,这会导致turbine不能采集到配置context-path的项目信息。因此需要配置turbine.instanceUrlSuffix.[clusterName]=/context-path/hystrix.stream
5、 当clusterNameExpression: metadata['cluster'],则客户端需要添加行如
eureka:
instance:
metadataMap:
cluster: muse
6、 启动hystrix dashborad查看turbine汇集的系统信息
hystrix dashborad界面输入形如:
http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
以上是turbine搭建的简单入门,在实际开发中,turbine通常聚合网关服务就可以,因为基本上微服务都是通过网关访问,当然要具体根据实际情况分析