springcloud-dashboard、turbine監控hystrix的使用

在hystrx中將線程數目等設置完成後,可以通過Dashboard或者Turbine對其進行監控,在使用的使用一般會有1-2S的延遲,對於這兩者的區別,Dashboard就是一個數據的展示面板,可以對單機的內容進行監控;而Turbine則是將多個相同的服務數據在Dashboard進行彙總展示,下圖展示了turbine彙總數據的形式。

不管Dashboard還是Turbine都是作爲獨立的服務運行,首先說明dashboard,添加以下jar包,並在主類中加上@EnableHystrixDashboard,啓用Hystrix Dashboard功能。
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-hystrix</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
除此之外還需要在被監控的服務中添加以下jar包,並@EnableCircuitBreaker開啓斷路功能
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

啓動dashboard之後,在界面中添加http://localhost:8084/hystrix.stream,其中8084是被監控服務的端口,這樣就可以在dashboard中監控服務的運行情況了,下圖是監控單個服務的頁面情況


上圖中需要解釋幾個參數,這幾個參數的大部分可以通過下圖表現出來,這裏重點說的是圖中展示不全或解釋不完全的。


第一、median、mean、90th、99th和99.5th,這是統計數據,這些統計數據來自metrics,可以在代碼中進行如下設置:
private static String getStatsStringFromMetrics(HystrixCommandMetrics metrics) {
    StringBuilder m = new StringBuilder();
    if (metrics != null) {
        HealthCounts health = metrics.getHealthCounts();
        m.append("Requests: ").append(health.getTotalRequests()).append(" ");
        m.append("Errors: ").append(health.getErrorCount()).append(" (").append(health.getErrorPercentage())
                .append("%)   ");
        m.append("Mean: ").append(metrics.getTotalTimeMean()).append(" ");
        m.append("50th: ").append(metrics.getExecutionTimePercentile(50)).append(" ");
        m.append("75th: ").append(metrics.getExecutionTimePercentile(75)).append(" ");
        m.append("90th: ").append(metrics.getExecutionTimePercentile(90)).append(" ");
        m.append("99th: ").append(metrics.getExecutionTimePercentile(99)).append(" ");
    }
    return m.toString();
}
一個比較好的解釋是The 90th percentile tells you the value for which 90% of the data points are smaller and 10% are bigger.,意思就是1065ms以下的佔99%,1065ms以上的佔1%,其他同樣類推
第二、Cluster和Host每秒的請求數目,其中Cluster代表集羣中每秒的請求數,host代表單機的每秒請求數
第三、Pool Size代表程序中的線程數目,並一定代表最大的線程數
第四、executions 正在執行的線程數,這個數量是小於Pool Size的
第五、max active 的解釋是hread count displays the rolling maximum number of active threads during a rolling statistical window。我的理解是超時回滾的線程數,這個數目和超時線程的數目應該是一致的
第六、Queue size 隊列大小
使用turbine的時候,dashboard服務的所有服務都不需要改變,因爲Turbine展示的數據還要在dashboard中展示,Turbine作爲一個單獨的服務需要添加以下jar包
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-turbine</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
在主類中添加以下註解
@Configuration
@EnableAutoConfiguration
@EnableTurbine
@EnableDiscoveryClient
在turbine的配置文件中添加以下數據eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/,之後在dashboard頁面中輸入http://localhost:8086/turbine.stream後,便可以對集羣中的提供相同服務的數據進行監控了,下邊就是監控兩個服務的頁面,我們可以看到host的數量是2,說明是監控了兩個相同的服務,通過每秒請求的數量也可以看出host的2倍是cluster

在使用turbine監控數據的時候出現一個問題:兩個相同的服務提供相同的接口,此時一個服務應該是另一個服務的複製,因此所設置的線程池的大小和隊列的大小也應該是一致的,但是出現以下幾種情況:
第一,線程數+隊列數爲偶數的情況,單個服務處理請求數目爲(線程數*2+隊列數)/2,而不是原來的線程數+隊列數,總體處理能力也由是線程數*2+隊列數,總體未驗證
第二,線程數+隊列數爲偶數的情況,單個服務處理請求數目和不加turbine監控時候的處理能力一樣,總體處理能力也由是線程數*2+隊列數,總體未驗證
這樣服務本身因爲添加了監控而導致服務本身的設置發生了變化,個人認爲這是不應該的發生的情況,監控不應該對服務本身產生影響,這是我測試的結果,有什麼不對的也請指出。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章