Apache Camelでサーキットブレーカーパターン（Circuit Breaker Pattern）その2（Hystrix Dashboardを試す）

# はじめに

前回の記事　[Apache Camelでサーキットブレーカーパターン](https://qiita.com/mkyz08/items/4412be9557517b2427f6)で、Hystrixを試してみました。
Hystrixではサーキットの状態をグラフィカルに表示できるDashboardがあるので、今回はそれを動かしてみます。

Apache+Spring Bootの組み合わせではHystrix DashboardをSpring Cloud Netflixコンポーネントを使用して動かせるようです。
ただし、今回はSpring Bootを使用しないので、スタンドアロンアプリケーションでHystrix Dashboardを動かしてみます。


# アプリケーションでHyrixのMetricsを出力する

hystrix-metrics-event-streamを使用して、アプリケーションからHyrixのMetricsを出力できるようにします。

まずは、以下のライブラリを追加します（Mavenの場合）。

```xml
<dependency>
    <groupId>com.netflix.hystrix</groupId>
    <artifactId>hystrix-metrics-event-stream</artifactId>
    <version>1.5.18</version>
</dependency>
```

アプリケーションにjettyを組み込み、hystrix-metrics-event-streamを利用できるようにします。
URLは「http://localhost:8090/hystrix.stream」にしています。

```java
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;

～省略～

			Server server = new Server(8090);
			ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
			server.setHandler(servletContext);
			final HystrixMetricsStreamServlet servlet = new HystrixMetricsStreamServlet();
			final ServletHolder holder = new ServletHolder(servlet);
			servletContext.addServlet(holder, "/hystrix.stream");
			server.start();
```


# スタンドアロン版のHystrix Dashboardのダウンロードと起動

まず、以下のページにアクセスし、Hystrix Dashboardスタンドアロン版のjarファイルをダウンロードします。

- https://bintray.com/kennedyoliveira/maven/standalone-hystrix-dashboard/1.5.6

2019年1月時点では1.5.6が最新バージョンでした。
ダウンロードしたファイルは"standalone-hystrix-dashboard-1.5.6-all.jar"になります。

ダウンロード後、以下のコマンドを実行して、Hystrix Dashboardを起動します。

```console
>java -jar standalone-hystrix-dashboard-1.5.6-all.jar
21:13:03.272 [vert.x-eventloop-thread-0] INFO  c.g.k.h.c.s.d.HystrixDashboardVerticle - Initializing the HystrixDashboardVerticle instance 1
21:13:03.571 [vert.x-eventloop-thread-0] INFO  c.g.k.h.c.s.d.HystrixDashboardVerticle - Compression support enabled: true
21:13:03.901 [vert.x-eventloop-thread-0] INFO  c.g.k.h.c.s.d.HystrixDashboardVerticle - Listening on port: 7979
21:13:03.901 [vert.x-eventloop-thread-0] INFO  c.g.k.h.c.s.d.HystrixDashboardVerticle - Access the dashboard in your browser: http://localhost:7979/hystrix-dashboard/
21:13:03.902 [vert.x-eventloop-thread-1] INFO  i.v.c.i.l.c.VertxIsolatedDeployer - Succeeded in deploying verticle

```

Hystrix DashboardにアクセスするためのURLは以下になります。

http://localhost:7979/hystrix-dashboard/

アクセスすると次の画面が表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/179607/55ba6976-63c9-4ff1-0336-2a05aa0dfc0a.png)

画面が表示された後、「Eureka Application～」という文章が表示された下のテキストボックスに、「http://localhost:8090/hystrix.stream」と入力し、「Add Stream」ボタンをクリックします。
次に「Monitor Streams」ボタンをクリックすると、以下の画面に遷移します。

![hystrixdashboard.gif](https://qiita-image-store.s3.amazonaws.com/0/179607/83b7341f-e8df-5385-d5f5-f4776605999d.gif)

エラー率が50%を超えると、「Circuit」がOpenになるように設定しています。
グラフの読み方は以下のとおりです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/179607/510f1c0b-e6d7-86ee-8fc5-14279a28bce4.png)


# 参考

- [Hystrix Dashboard wiki](https://github.com/Netflix-Skunkworks/hystrix-dashboard/wiki)
- [Hystrix Dashboard + Turbine Stream Aggregator](https://medium.com/netflix-techblog/hystrix-dashboard-turbine-stream-aggregator-60985a2e51df)
- [Hystrix Examples — and a little bit more](https://ahus1.github.io/hystrix-examples/manual.html)
- [Storing months of historical metrics from Hystrix in Graphite](https://www.nurkiewicz.com/2015/02/storing-months-of-historical-metrics.html)