對於分佈式應用來講,不可避免地要與系統周邊的服務打交道,這個時候,須要對外部的服務調用進行監控,這裏咱們利用hystrix進行監控,並將其整合到dropwizard的metrics,方便統一輸出到statsd。後端
<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-codahale-metrics-publisher</artifactId> <version>1.5.9</version> </dependency>
@Bean HystrixMetricsPublisher hystrixMetricsPublisher() { HystrixCodaHaleMetricsPublisher publisher = new HystrixCodaHaleMetricsPublisher(metricRegistry); HystrixPlugins.getInstance().registerMetricsPublisher(publisher); return publisher; }
{ "HystrixDemoController.hello.countBadRequests": 0, "HystrixDemoController.hello.countFallbackFailure": 0, "HystrixDemoController.hello.rollingCountTimeout": 2, "HystrixDemoController.hello.rollingCountFailure": 0, "HystrixThreadPool.HystrixDemoController.rollingMaxActiveThreads": 1, "HystrixDemoController.hello.latencyExecute_percentile_25": 0, "HystrixDemoController.hello.currentTime": 1491203675091, "HystrixDemoController.hello.rollingCountResponsesFromCache": 0, "HystrixThreadPool.HystrixDemoController.completedTaskCount": 26, "HystrixDemoController.hello.rollingCountFallbackMissing": 0, "HystrixThreadPool.HystrixDemoController.currentTime": 1491203675091, "HystrixDemoController.hello.latencyTotal_percentile_25": 0, "HystrixDemoController.hello.rollingCountFallbackSuccess": 8191, "HystrixThreadPool.HystrixDemoController.totalTaskCount": 26, "HystrixDemoController.hello.rollingCountSemaphoreRejected": 0, "HystrixDemoController.hello.countCollapsedRequests": 0, "HystrixDemoController.hello.latencyExecute_percentile_995": 0, "HystrixDemoController.hello.latencyTotal_percentile_50": 0, "HystrixDemoController.hello.propertyValue_executionIsolationSemaphoreMaxConcurrentRequests": 10, "HystrixDemoController.hello.propertyValue_circuitBreakerErrorThresholdPercentage": 50, "HystrixDemoController.hello.latencyTotal_percentile_90": 0, "HystrixDemoController.hello.countFallbackEmit": 0, "HystrixDemoController.hello.latencyTotal_percentile_995": 0, "HystrixDemoController.hello.countTimeout": 2, "HystrixThreadPool.HystrixDemoController.propertyValue_queueSizeRejectionThreshold": 5, "HystrixDemoController.hello.countSuccess": 6, "HystrixDemoController.hello.latencyTotal_percentile_75": 0, "HystrixThreadPool.HystrixDemoController.propertyValue_maximumSize": 10, "HystrixDemoController.hello.propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests": 10, "HystrixDemoController.hello.countEmit": 0, "HystrixDemoController.hello.executionSemaphorePermitsInUse": 0, "HystrixDemoController.hello.countFallbackSuccess": 8191, "HystrixThreadPool.HystrixDemoController.largestPoolSize": 10, "HystrixDemoController.hello.propertyValue_circuitBreakerSleepWindowInMilliseconds": 5000, "HystrixDemoController.hello.propertyValue_circuitBreakerRequestVolumeThreshold": 20, "HystrixDemoController.hello.latencyExecute_percentile_75": 0, "HystrixDemoController.hello.latencyExecute_percentile_90": 0, "HystrixDemoController.hello.latencyExecute_percentile_50": 0, "HystrixDemoController.hello.propertyValue_executionTimeoutInMilliseconds": 100, "HystrixDemoController.hello.latencyTotal_percentile_5": 0, "HystrixDemoController.hello.rollingCountFallbackFailure": 0, "HystrixDemoController.hello.latencyTotal_mean": 0, "HystrixDemoController.hello.propertyValue_rollingStatisticalWindowInMilliseconds": 10000, "HystrixThreadPool.HystrixDemoController.propertyValue_keepAliveTimeInMinutes": 1, "HystrixDemoController.hello.rollingCountFallbackRejection": 198, "HystrixDemoController.hello.countThreadPoolRejected": 0, "HystrixDemoController.hello.countFallbackMissing": 0, "HystrixDemoController.hello.rollingCountBadRequests": 0, "HystrixDemoController.hello.countResponsesFromCache": 0, "HystrixDemoController.hello.rollingCountSuccess": 6, "HystrixThreadPool.HystrixDemoController.queueSize": 0, "HystrixThreadPool.HystrixDemoController.threadActiveCount": 0, "HystrixDemoController.hello.countShortCircuited": 8387, "HystrixDemoController.hello.rollingCountExceptionsThrown": 198, "HystrixDemoController.hello.rollingCountFallbackEmit": 0, "HystrixDemoController.hello.rollingCountThreadPoolRejected": 0, "HystrixDemoController.hello.rollingCountShortCircuited": 8387, "HystrixThreadPool.HystrixDemoController.propertyValue_corePoolSize": 10, "HystrixDemoController.hello.latencyExecute_mean": 0, "HystrixDemoController.hello.countExceptionsThrown": 198, "HystrixDemoController.hello.propertyValue_executionIsolationThreadTimeoutInMilliseconds": 100, "HystrixThreadPool.HystrixDemoController.propertyValue_actualMaximumSize": 10, "HystrixDemoController.hello.latencyExecute_percentile_5": 0, "HystrixDemoController.hello.latencyTotal_percentile_99": 0, "HystrixDemoController.hello.errorPercentage": 25, "HystrixDemoController.hello.countFallbackRejection": 198, "HystrixThreadPool.HystrixDemoController.rollingCountThreadsExecuted": 6, "HystrixThreadPool.HystrixDemoController.propertyValue_maxQueueSize": -1, "HystrixDemoController.hello.latencyExecute_percentile_99": 0, "HystrixDemoController.hello.rollingCountEmit": 0, "HystrixDemoController.hello.rollingCountCollapsedRequests": 0, "HystrixThreadPool.HystrixDemoController.countThreadsExecuted": 7, "HystrixDemoController.hello.countFailure": 0, "HystrixThreadPool.HystrixDemoController.rollingCountCommandsRejected": 0, "HystrixDemoController.hello.countSemaphoreRejected": 0 }
hystrix輸出的指標比較多,這個須要注意一下後端存儲容量。
hystrix除了輸出latencyTotal相關分佈的響應時間,還輸出了fallback觸發的相關數據,以及熔斷的次數,帶rolling前綴的爲瞬時值,不帶的通常爲累積量。這裏講一下幾個指標:分佈式
countShortCircuited爲累積量ui
rollingCountShortCircuited爲瞬時值,報警的時候,之後者爲主,該值主要是上報間隔期間方法調用被熔斷的次數。.net
countFallbackSuccess爲fallback成功執行的次數,累計量。code