ようへいの日々精進XP

よかろうもん

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

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

はじめに

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

github.com


consul-kv-dashboard について

sfujiwara.hatenablog.com

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

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

pocketstudio.jp


試す

ビルド

既に 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 にアクセスすると以下のように表示される。

f:id:inokara:20150708003458p:plain

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,sys\\nj=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 アドレス等が表示される。

f:id:inokara:20150708010203p:plain

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

f:id:inokara:20150708010423p:plain

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

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

sh script.sh 2

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

f:id:inokara:20150708010733p:plain

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

f:id:inokara:20150708011608p:plain

おお。


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

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