以前に書いていたものをスクショを再作成して放出。

はじめに

stretcher の作者である fujiwara さんが作られている consul-kv-dashboard を試してみる。

fujiwara/consul-kv-dashboard

consul-kv-dashboard について

Consul KVSをバックエンドにしたリアルタイムダッシュボード #monitoringcasual

上記のブログ記事とスライドに詳細に記載されている為、詳細については割愛(是非、ご一読下さい)。

自分なりの理解としては、Consul の KVS データをリアルタイムに表示する為の Web UI ツール。 リアルタイムに表示する為の手法としてブロッキングクエリを利用しているとのことで、ブロッキングクエリについては以下の記事が参考になった。

【Consul】ブロッキング・クエリ(blokcing query)とは | Pocketstudio.jp log3

試す

ビルド

既に Go の環境があるという前提で…

go get -u github.com/jteeuwen/go-bindata/...  
go get golang.org/x/tools/cmd/stringer  
cd $GOPATH/src/github.com/fujiwara  
git clone https://github.com/fujiwara/consul-kv-dashboard.git  
cd consul-kv-dashboard  
make  

上記でカレントディレクトリにバイナリファイルが出来る。

起動

consul クラスタ内のノードにバイナリファイルを設置して以下のように起動するだけ。簡単。

/path/to/consul-kv-dashboard &  

ブラウザで http://host:3000 にアクセスすると以下のように表示される。

KVS にデータを登録してみる

ドキュメントに従って、以下のようなパスで KVS にデータを登録する。

/v1/kv/{namespace}/{category}/{node}(/{key})?flags={flags}  
  • namespace はデフォルトでは dashboard だが、起動時に任意の名前に指定することが出来る
  • node に関しては Consul のノードを登録する
  • flags には UNIX Time を 1000 倍してステータスコード(0 から 3)を付加した数値を付与する

以下のようなシェルスクリプトを利用して登録してみた。

datetime=`date +%s`  
status_code=$1  
datetime_code=`expr ${datetime} * 1000 + ${status_code}`  
node_name=`curl -s localhost:8500/v1/agent/self | python -c "exec("import json,sysnj=json.load(sys.stdin)nprint j['Member']['Name']")"`  
curl -X PUT -d "hello world" "localhost:8500/v1/kv/dashboard/foo/${node_name}/bar?flags=${datetime_code}"  

シェルスクリプトを実行する。

sh script.sh 0  

スクリプトを実行すると true が表示され、consul-kv-dashboard を見ると以下のように KVS に登録された情報と共にステータスコードの値によってステータスを示す色と共にノードの情報、IP アドレス等が表示される。

尚、consul-ui でも同様のデータを確認することが出来る。

リアルタイムな情報の表示、更新

先ほどのスクリプトを以下のように実行してみる。

sh script.sh 2  

スクリプト実行後、一瞬にして以下のようにステータスコードの値を判断してステータスを示す色が変わり情報が更新された。

また、試しにステータスコードを 1 にしてみると…

おお。

consul-kv-dashboard を利用することで

Consul クラスタ内で動かしている cron 等バッチ処理のエラーハンドリングをメール等から Consul の KVS に置き換えられそう。

元記事はこちら

consul-kv-dashboard を試してみたメモ