@uzyexe のノート

ITインフラ運用系のネタを主に書く、つもり・・・

towncrier でシンプルなサービスヘルスダッシュボードを作る

towncrier を使うとこんな感じのシンプルなサービスヘルスダッシュボードが比較的簡単に作れます。

ちなみに、"town crier"というのは、東西屋=街頭で宣伝の口上を述べる人という意味だそうです。

 

f:id:uzy_exe:20140714233419p:plain

 

Dockerを使ったインストール〜起動方法

Dockerが稼働している環境であれば、下記コマンドで8080番ポート上で起動できます。

docker run -d -p 8080:8080 robn/towncrier

 

手動での通常インストール〜起動方法

Dockerを使用せずに、下記手順でインストールすることも可能です。

なお、CentOS環境では、下記パッケージを事前にyumでインストールしておく必要がありました。

yum install -y perl-devel libxml2-devel

インストール完了後、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 を参考にしてください。

(たぶん、ここを読んでるような人達だったら難なく読み解けるはず・・・)


イベントの投入

以下のように、APIservices/: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=には任意の文字列を入力できます。

 

まとめ

curlAPIを叩く知識があれば使いこなせるので敷居はそれほど高くはなく、シンプルなヘルスボードとして使うにはちょうど良いと思います。

ちょっと触った感じだと、イベントのタイムスタンプがUTC表示以外に変更できないのが痒いところでした。