上一篇寫了如何使用 Hystrix的dashboard去監控單個應用的訪問情況
現在要介紹的是如何去監控整個集群的訪問情況,這里要使用到Turbine,一個Netflix的開源項目
它可以將多hystrix.stream的內容聚合為一個數據源供給dashboard展示。
我們先說一下整體的架構:
2個服務調用者:consumer consumer2
分別調用 provider provider2的hello方法
新建一個負責監控的子項目 dashboard-turbine 去監控集群
監控者dashboard-turbine
在 pom.xml 添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.3.RELEASE</version>
</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.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
application.yml
spring: application: name: dashboard server: port: 8060 eureka: client: service-url: defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/ feign: hystrix: enabled: true turbine: app-config: consumer,consumer2 //注冊中心的調用者名稱 aggregator: cluster-config: default //默認default cluster-name-expression: new String("default")
turbine.appConfig
:配置Eureka中的serviceId列表,表明監控哪些服務turbine.aggregator.clusterConfig
:指定聚合哪些集群,多個使用”,”分割,默認為default。可使用http://.../turbine.stream?cluster={clusterConfig之一}
訪問turbine.clusterNameExpression
:- 1. clusterNameExpression指定集群名稱,默認表達式appName,此時:
turbine.aggregator.clusterConfig
需要配置想要監控的應用名稱; - 2. 當clusterNameExpression: default時,
turbine.aggregator.clusterConfig
可以不寫,因為默認就是default; - 3. 當clusterNameExpression: metadata[‘cluster’]時,假設想要監控的應用配置了
eureka.instance.metadata-map.cluster: ABC
,則需要配置,同時turbine.aggregator.clusterConfig: ABC
啟動類:
@SpringBootApplication @EnableHystrixDashboard //開啟監控 @EnableTurbine //開啟turbine支持 public class ApplicationStart { public static void main(String[] args) { SpringApplication.run(ApplicationStart.class); } }
服務提供provider
和前面幾篇的一樣,就是多了一個復制品, 並把application.name改為providr2
服務調用consumer
在前面的Hystrix版的調用者的基礎上,修改如下:
1.添加pom.xml的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-turbine</artifactId> </dependency>
2.啟動類添加servlet,所有需要被監控的應用都一定要添加
@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; }
依次啟動2個privider和2個consumer,以及監控dashboard-turbine
打開http://localhost:8060/hystrix/
訪問默認集群,輸入 : http://localhost:8060/turbine.stream 點擊確定,可以看到監控內容,如果一直顯示Loading 是因為在等待訪問,請求一次服務就有了
可以看到2個provider的信息和2個consumer的訪問情況,分別訪問
localhost:8080/message/remote/hello 這是consumer的,監控中對應會有訪問顯示
localhost:8081/message/remote/hello 這是consumer1的,監控中對應會有訪問顯示
訪問http://localhost:8001/turbine.stream,可以拿到訪問情況的數據流,會不斷的Ping,往下刷數據