towncrier でシンプルなサービスヘルスダッシュボードを作る
towncrier を使うとこんな感じのシンプルなサービスヘルスダッシュボードが比較的簡単に作れます。
ちなみに、"town crier"というのは、東西屋=街頭で宣伝の口上を述べる人という意味だそうです。
Dockerを使ったインストール〜起動方法
Dockerが稼働している環境であれば、下記コマンドで8080番ポート上で起動できます。
docker run -d -p 8080:8080 robn/towncrier
手動での通常インストール〜起動方法
Dockerを使用せずに、下記手順でインストールすることも可能です。
なお、CentOS環境では、下記パッケージを事前にyumでインストールしておく必要がありました。
インストール完了後、towncrierをインストールしたディレクトリ上で下記コマンドを実行してください。
carton exec -- plackup bin/app.pl
carton exec実行後、ブラウザからtowncrierのWebUIにアクセスできることが確認できると思います。なお、デフォルトではtowncrierのWebUIは5000番ポートで起動します。
towncrierを5000番ポート以外で起動させたい場合には、carton exec実行時に--portオプションで任意のポートを指定して起動することも可能です。
8080番ポートを指定して起動する場合の実行例
carton exec -- plackup --port=8080 bin/app.pl
設定変更
towncrierのディレクトリ内に存在する config.yml を修正することで設定を調整できます。
例えば、APIのログインアカウントを変更する際はconfig.yml の以下の箇所を変更してください。
初期データの投入
towncrierは初回起動直後の初期状態では何もデータが登録されていません。
この記事の執筆時点では、ボタンをポチポチするだけで登録できるようなwebUIは存在しないので、REST APIに対してPOSTすることでサービスやグループ、ステータスなどの定義を任意に登録する必要があります。
基本的にはcurlで以下のような感じでPOSTすることで登録できます。(このあたりは、towncrierの bin/fixtures.sh を参考にしてください。)
- 実行例
API一覧
towncrierの lib/TownCrier.pm を参考にしてください。
(たぶん、ここを読んでるような人達だったら難なく読み解けるはず・・・)
イベントの投入
以下のように、APIのservices/:service/events に対してstatusとmessageをPOSTすることで、towncrierへのイベント投入ができます。
- 実行例
このような形でtowncrierにイベントを投入することで、サービスステータスの遷移状況をWebUI上に反映させることができます。
なお、status=は bin/fixtures.sh を参考にしてステータス定義を投入した場合には、upかdownかwarningの三種類を選択できます。(より厳密には、curl -u $AUTH -i http://localhost:$PORT/admin/api/v1/statuses でGETしたときに拾えるid行の値が有効なstatusの値です。)
message=には任意の文字列を入力できます。
まとめ
curlでAPIを叩く知識があれば使いこなせるので敷居はそれほど高くはなく、シンプルなヘルスボードとして使うにはちょうど良いと思います。
ちょっと触った感じだと、イベントのタイムスタンプがUTC表示以外に変更できないのが痒いところでした。