Hystrix提供了實時監(jiān)控箩溃,可以記錄執(zhí)行信息,QPS拄丰,請求中成功和失敗的數(shù)量等蝇棉。
Hystrix Dashboard的可視化監(jiān)控
單個應用的熔斷監(jiān)控
1. 添加依賴和配置
添加Eureka、Hystrix澜倦、Hystrix-dashboard聚蝶、Actuator、Feign的依賴
<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.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</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-web</artifactId>
</dependency>
2. 添加配置
spring.application.name=spring-cloud-consumer-hystrix
server.port=9001
feign.hystrix.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
3. 添加配置啟動類和Servlet
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrixDashboard
@EnableCircuitBreaker
public class SpringCloudConsumerHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsumerHystrixApplication.class, args);
}
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
注意: springboot2.0需要配置Servlet才會顯示監(jiān)控數(shù)據(jù)藻治。
4. 查看監(jiān)控數(shù)據(jù)
- 啟動項目spring-cloud-eureka碘勉、spring-cloud-producer、spring-cloud-consumer三個項目
- 訪問http://localhost:9001/hystrix
然后輸入http://localhost:9001/actuator/hystrix.stream 即可進入監(jiān)控頁面桩卵。
Hystrix Dashboard + Turbine的可視化監(jiān)控
在分布式系統(tǒng)中验靡,相同服務實例經(jīng)常需要部署上百甚至上千個倍宾,很多時候需要把服務實例的狀態(tài)以集群方式展現(xiàn)出來,這樣就可以更好的查看系統(tǒng)狀態(tài)胜嗓。凿宾,為此Netflix提供了一個開源項目(Turbine)來提供把多個hystrix.stream的內(nèi)容聚合為一個數(shù)據(jù)源供Dashboard展示。
1. 添加依賴并啟動支持
需要添加Turbine兼蕊、Hystrix-dashboard初厚、Actuator、Hystrix依賴
<!--Turbine-->
<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</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.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</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-web</artifactId>
</dependency>
2. 添加配置
spring.application.name=hystrix-dashboard-turbine
server.port=8001
turbine.appConfig=node01,node02
turbine.aggregator.clusterConfig= default
turbine.clusterNameExpression= new String("default")
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
- turbine.appConfig :配置Eureka中的serviceId列表孙技,表明監(jiān)控哪些服務
- turbine.aggregator.clusterConfig :指定聚合哪些集群产禾,多個使用”,”分割,默認為default牵啦⊙乔椋可使用http://.../turbine.stream?cluster={clusterConfig之一}訪問
- turbine.clusterNameExpression : 1. clusterNameExpression指定集群名稱,默認表達式appName哈雏;此時:turbine.aggregator.clusterConfig需要配置想要監(jiān)控的應用名稱楞件;2. 當clusterNameExpression: default時,turbine.aggregator.clusterConfig可以不寫裳瘪,因為默認就是default土浸;3. 當clusterNameExpression: metadata[‘cluster’]時,假設想要監(jiān)控的應用配置了eureka.instance.metadata-map.cluster: ABC彭羹,則需要配置黄伊,
3. 配置啟動支持
@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class HystrixDashboardTurbineApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardTurbineApplication.class, args);
}
}
4. 創(chuàng)建多個服務消費者
分別創(chuàng)建子項目spring-cloud-consumer-node1,spring-cloud-consumer-node2
node01添加配置
spring.application.name=node01
server.port=9001
feign.hystrix.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
node02添加配置
spring.application.name=node02
server.port=9002
feign.hystrix.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
分別配置feign
node01
@FeignClient(name = "spring-cloud-provider", fallback = HelloHystrix.class)
public interface MyFeignClient {
@RequestMapping(value = "/hello")
public String hello(@RequestParam(value = "name") String name);
}
node02
@FeignClient(name = "spring-cloud-provider2", fallback = HelloHystrix.class)
public interface MyFeignClient {
@RequestMapping(value = "/hello")
public String hello2(@RequestParam(value = "name") String name);
}
5. 測試
依次啟動spring-cloud-eureka、spring-cloud-consumer-node1派殷、spring-cloud-consumer-node1还最、hystrix-dashboard-turbine(Turbine)
(1)訪問 http://localhost:8001/turbine.stream
返回:
ping
data: {"reportingHostsLast10Seconds":1,"name":"meta","type":"meta","timestamp":1494921985839}
進行圖形化監(jiān)控查看,輸入:http://localhost:8001/hystrix毡惜,返回酷酷的小熊界面拓轻,輸入: http://localhost:8001/turbine.stream,然后點擊 Monitor Stream ,可以看到出現(xiàn)了倆個監(jiān)控列表
參考:
http://www.ityouknow.com/springcloud/2017/05/18/hystrix-dashboard-turbine.html