GitHubのGoのTrendを眺めてたらGreenWallという死活監視ツールを見つけたので使ってみた。
GreenWallはGoで書かれた簡易的な死活監視ツールで、HTTP/HTTPSとICMP、TLSに対応してます。ヘルスチェックの実装自体はpluggableになってるので、今後色々なタイプのヘルスチェック実装が追加されてくのでしょう。
使い方
install
とりあえずgo getでgreenwallを取ってくる。
$ go get github.com/mtojek/greenwall
監視設定ファイルを作成
次に、何を監視するかを定義したyamlファイルを用意。これに監視するエンドポイントをつらつらと列挙してく。書き方は公式のREADMEを見ればわかると思うのでよしなにやってほしい。
---
general:
healthcheckEvery: 15s
httpClientTimeout: 5s
refreshDashboardEvery: 10s
groups:
- name: Frontend Nodes (us-east-1)
nodes:
- name: front-1
endpoint: https://www.example.com/
type: http_check
parameters:
expectedPattern: Example
- name: front-2
endpoint: https://www.example.com/
type: http_check
parameters:
expectedPattern: WillNotFindThis
- name: Middleware Nodes (us-west-2)
nodes:
- name: middleware-1 with a really long name
endpoint: https://www.example.com/
type: http_check
- name: middleware-2
endpoint: https://www.example.com/
type: http_check
- name: Backend Nodes (us-west-2)
nodes:
- name: backend-1
endpoint: https://www.example.com/
type: http_check
- name: backend-2
endpoint: https://www.example.com/
type: http_check
- name: backend-3
endpoint: https://www.example.com/
type: http_check
- name: backend-4
endpoint: https://1234567890.example.com/
type: http_check
- name: backend-5
endpoint: https://www.example.com/
type: http_check
実行する
これで実行準備は出来たので早速動かしてみる。起動の際に、GreenWallのポート、config.yamlの場所、GreenWallのフロントエンドリソースの場所を指定する必要がある。STATIC_DIR
はgo getでインストールしていればこの通りに指定すれば動くはず。
$ PORT=9001 CONFIG=your-path/config.yaml STATIC_DIR=$GOPATH/src/github.com/mtojek/greenwall/frontend greenwall
実際に動かしてみるとこんな感じ。
![](/images/greenwall-status-check/20161227153119.png)
config.yamlで設定したhealthcheckEvery(ヘルスチェック間隔)、refreshDashboardEvery(ブラウザのリロード間隔)に基づき、GreenWallの状態が更新されていきます。 レスポンスに期待する文字列が含まれていなければ赤くなる。
使い所
現時点では機能的にはまだまだ足りないので、Productionというよりは開発環境がたくさんあったり、かつ複数のmicroservicesで構成されているようなプロジェクトで役に立ちそう。死活監視をSlackで通知するというのをやってるとこもあると思うけど、流れてしまうし現時点での各サービスの状態をチェックしたい場合便利そう。また、APIのエンドポイント別に定義しとけば機能ごとの継続的なチェックにも使えるかもしんない。
余談
Basic認証張ってる環境に対して監視いれてみたかったのでPRした。