1. 程式人生 > >Spring Cloud(七)Hystrix Dashboard和Turbine服務監控

Spring Cloud(七)Hystrix Dashboard和Turbine服務監控

文章目錄

1 Hystrix Dashboard案例

SpringCloud對Hystrix Dashboard進行了整合,可以對通過Hystrix發起的請求進行準實時統計,並以報表和圖形的形式展示給使用者(包括每秒執行多少次?請求成功和失敗等)。新建一個consumer hystrix dashboard服務,在consumer hystrix基礎上改進:

1.1 增加依賴

<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>

1.2 編寫啟動類

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrixDashboard
@EnableCircuitBreaker
public class SpringCloudConsumerHystrixDashboardApplication80 {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsumerHystrixDashboardApplication80.class, args);
    }
}

1.3 測試

啟動服務,訪問地址:http://localhost/hystrix,看到豪豬介面表示已經配置好了。
在這裡插入圖片描述
從頁面的文字內容中我們可以知道,Hystrix Dashboard共支援三種不同的監控方式,依次為:

  1. 預設的叢集監控:通過URLhttp://turbine-hostname:port/turbine.stream開啟,實現對預設叢集的監控。
  2. 指定的叢集監控:通過URLhttp://turbine-hostname:port/turbine.stream?cluster=[clusterName]開啟,實現對clusterName叢集的監控。
  3. 單體應用的監控:通過URLhttp://hystrix-app:port/hystrix.stream開啟,實現對具體某個服務例項的監控。

1.4 監控

在網址輸入框輸入http://localhost/hystrix.stream ,然後點選 Monitor Stream,進入頁面:

在這裡插入圖片描述
如何看圖

  1. 七色:進入監控介面後會有其中顏色的數字,其含義可以對應右上角相同顏色的單詞表示的狀態,其值代表該狀態下觸發的次數。
  2. 一圈:圈的顏色變化代表了例項的健康程度,它的健康度從綠色、黃色、橙色、紅色遞減。圈的大小代表該服務的流量,圈越大流量越大。
  3. 一線:代表監控間隔中,服務被訪問的頻率的折線圖。
  4. 通過觀察這些就可以在大量的例項中找出故障例項和高壓例項進行修復和維護。

2 Hystrix Dashboard Turbine案例

Hystrix Dashboard 只能實現對服務單個例項的資料展現,分散式系統中,為了實現高可用,相同的服務肯定會佈置很多甚至成百上千個,我們希望這些對服務資料進行聚合展示分析。 為此,Netflix提供了一個開源專案(Turbine),它將幫助我們實現該功能。

2.1 建立Hystrix Dashboard Turbine服務

2.1.1 新增依賴。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-netflix-turbine</artifactId>
    </dependency>
    <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>
</dependencies>

2.1.2 編寫配置檔案。

server:
  port: 9001
spring:
  application:
    name: spring-cloud-hystrix-dashboard-turbine
eureka:
  client:
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7001.com:7001/eureka/
turbine:
  app-config: spring-cloud-consumer-hystrix-dashboard-turbine-node-9002,spring-cloud-consumer-hystrix-dashboard-turbine-node-9003
  clusterNameExpression: new String("default")
  aggregator:
    clusterConfig: default
  • turbine.appConfig :配置需要聚合的應用。
  • 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: A,則需要同時配置turbine.aggregator.clusterConfig: A

2.1.3 啟動類新增@EnableTurbine,啟用對Turbine的支援。

@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class SpringCloudHystrixDashboardTurbineApplication9001 {
	public static void main(String[] args) {
		SpringApplication.run(SpringCloudHystrixDashboardTurbineApplication9001.class, args);
	}
}

2.2 在專案spring-cloud-consumer-hystrix-80基礎上改造兩個服務消費者

2.2.1 改造spring-cloud-consumer-hystrix-dashboard-turbine-node-9002

2.2.1.1 改動application.yml

server:
  port: 9002
spring:
  application:
    name: spring-cloud-consumer-hystrix-dashboard-turbine-node-9002
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
feign:
  hystrix:
    enabled: true

2.2.2 改造spring-cloud-consumer-hystrix-dashboard-turbine-node-9003

2.2.2.1 改動application.yml

server:
  port: 9003
spring:
  application:
    name: spring-cloud-consumer-hystrix-dashboard-turbine-node-9003
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
feign:
  hystrix:
    enabled: true

2.2.2.2 改動HelloRemote介面

@FeignClient(name= "spring-cloud-provider", fallback = HelloRemoteFallback.class)
public interface HelloRemote {
    @RequestMapping(value = "/hello/{name}")
     String hello2(@RequestParam(value = "name") String name);
}

2.2.2.3 改動對應的類(看原始碼)

2.3 測試

依次啟動uereka、spring-cloud-consumer-hystrix-dashboard-turbine-node-9002、spring-cloud-consumer-hystrix-dashboard-turbine-node-9003、spring-cloud-hystrix-dashboard-turbine-9001

  1. 訪問eureka,http://eureka7001.com:7001/,可以看到註冊三個微服務。
    在這裡插入圖片描述
  2. 依次訪問http://localhost:9002/consumer/hello/jack,http://localhost:9003/consumer/hello/jack。
  3. 訪問http://localhost:9001/hystrix。
    在這裡插入圖片描述
  4. 監控地址填入http://localhost:9001/turbine.stream。
    在這裡插入圖片描述

原始碼地址