Hystrix Dashboard


為了度量逾時、失敗率等,Hystrix 會有統計數據,如果想取得、觀察、評估這些數據,可以透過 Actuator,以〈Feign 與 Hystrix〉為例,若已經在 gossip 中設定了 Hystrix 的相關支援,接下來,可以在 build.gradle 中加入:

implementation('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')
implementation('org.springframework.boot:spring-boot-starter-actuator') 

為了能取得數據,必須加註 @EnableCircuitBreaker

@SpringBootApplication(
    scanBasePackages={
        "cc.openhome.controller",
        "cc.openhome.model",
        "cc.openhome.aspect",
        "cc.openhome.hystrix"
    }
)
@EnableFeignClients(
    basePackages={
        "cc.openhome.model"
    }
)
@EnableCircuitBreaker
@PropertySource("classpath:path.properties")
public class GossipApplication {

透過 Actuator 監控數據的端點會是 hystrix.stream,預設並沒有開放這個端點,因此必須在 application.properties 中設定:

spring.thymeleaf.cache=false
feign.hystrix.enabled=true
management.endpoints.web.exposure.include: hystrix.stream

然後就可以啟動應用程式,開啟瀏覽器請求服務,若想取得統計數據,可以連線 http://localhost:8080/actuator/hystrix.stream,你會看到持續的串流資料(text/event-stream):

ping: 

data: {"type":"HystrixCommand","name":"HystrixInvocationHandler$1","group":"MessageService","currentTime":1547166817677,...略}

data: {"type":"HystrixThreadPool","name":"MessageService","currentTime":1547166817677,"currentActiveCount":0, ...略}

ping: 

....略

接下來就是根據這些串流資料,看你要做何種呈現或整理了,若想要有個現成的呈現方案,可以使用 Hystrix Dashboard,Spring Boot 提供了 Starter,可以在新建專案時選擇,在建立新專案後,於專案啟動類別上加註 @EnableHystrixDashboard

package cc.openhome;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

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

若在本機上測試,在 application.properties 中設定 server.port,不要與其他專案衝突就好,例如設定為 8088,然後啟動專案,連線 http://localhost:8088/hystrix

Hystrix Dashboard

對於單一應用程式或服務對其他服務的請求監控,如圖中第三個提示寫的:

Single Hystrix App: http://hystrix-app:port/actuator/hystrix.stream 

也就是可以剛才看到串流資料的網址 http://localhost:8080/actuator/hystrix.stream 貼到最上方的文字輸入框,然後按下「Monitor Stream」,接著隨便請求 http://localhost:8080/(你可以在一些服務上故意製造一些延遲),然後回到 Monitor Stream 的畫面:

Hystrix Dashboard

在〈hystrix-dashboard〉中有關於圖表的解釋:

Hystrix Dashboard

在 Monitor Stream 之後,Hystrix Dashboard 後端會請求指定的串流目標,接著透過 Hystrix Dashboard 的 http://localhost:8088/proxy.stream 來發佈取得的串流資料。

你可以在 Dashboard 中找到修改過後的 gossip,以及 HystrixDashboard 專案。