輸出hystrix指標到dropwizard metrics

對於分佈式應用來講,不可避免地要與系統周邊的服務打交道,這個時候,須要對外部的服務調用進行監控,這裏咱們利用hystrix進行監控,並將其整合到dropwizard的metrics,方便統一輸出到statsd。後端

引入hystrix-codahale-metrics-publisher

<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

相關文章
相關標籤/搜索