GreenWallでサクッとサービスの死活状態を可視化する

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

実際に動かしてみるとこんな感じ。

config.yamlで設定したhealthcheckEvery(ヘルスチェック間隔)、refreshDashboardEvery(ブラウザのリロード間隔)に基づき、GreenWallの状態が更新されていきます。 レスポンスに期待する文字列が含まれていなければ赤くなる。

使い所

現時点では機能的にはまだまだ足りないので、Productionというよりは開発環境がたくさんあったり、かつ複数のmicroservicesで構成されているようなプロジェクトで役に立ちそう。死活監視をSlackで通知するというのをやってるとこもあると思うけど、流れてしまうし現時点での各サービスの状態をチェックしたい場合便利そう。また、APIのエンドポイント別に定義しとけば機能ごとの継続的なチェックにも使えるかもしんない。

余談

Basic認証張ってる環境に対して監視いれてみたかったのでPRした。