Hystrix Turbine


在〈Hystrix Dashboard〉中看到 Dashboard 首頁中,其實有列三個範例:

Cluster via Turbine (default cluster): http://turbine-hostname:port/turbine.stream 
Cluster via Turbine (custom cluster): http://turbine-hostname:port/turbine.stream?cluster=[clusterName] 
Single Hystrix App: http://hystrix-app:port/actuator/hystrix.stream

Hystrix Dashboard〉的示範使用的是第三個,取得指定的單個監控點的串流資料來顯示,至於前兩個範例,其實是可以藉由 Turbine 伺服器,將多個監控點(也可能是個 Turbine 來源)的串流資料聚合為一個叢集,再藉由端點 turbine.stream 來發佈,如此一來,就可以一次監看多個服務的狀態。

若使用 Spring Boot,可以直接選擇 Turbine 這個 Starter,在建立專案之後,定義 application.yml:

spring:
    application:
        name: turbine

server:
    port: 8090

eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8761/eureka/
    instance:
        prefer-ip-address: true

turbine:
    appConfig: gossip
    aggregator:
        clusterConfig: default
    clusterNameExpression: new String("default")

Turbine 要註冊到服務發現伺服器,至於 Turbine 本身的設定上,appConfig 用來設定要聚合的監控點,多個監控點的話,可以用逗號區隔,clusterConfig 表示要聚合的叢集,default 的意義,就是 Dashboard 範例中指出的,表示直接透過 turbine.stream,可以設定多個叢集名稱,以逗號區隔。

接著在啟動專案的主類別上,標註 @EnableTurbine

package cc.openhome;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

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

被監控點必須也註冊到服務發現伺服器,才能被上面的 Turbine 查找到,因此若是想監控 gossip,要將 bootstrap.properties 中的 eureka.client.registerWithEureka=false 註解掉。

若想測試多個監控點的聚合,可以啟動多個 gossip(指定不同的埠號就可以了),然後啟動 Turbine 專案(server.port 我設為 8090 了),連線 http://localhost:8090/turbine.stream,接著隨意請求啟動的 gossip,就會看到 http://localhost:8090/turbine.stream 的監控串流資料。

若想使用〈Hystrix Dashboard〉中的 Dashboard 專案來圖形化監控資料,可以將 http://localhost:8090/turbine.stream 貼至輸入文字框,按下「Monitor Stream」,就可以看到圖化化的顯示結果:

Hystrix Turbine

你可以在 Turbine 找到以上的範例專案。