以前に書いていたものをスクショを再作成して放出。
はじめに
stretcher の作者である 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 に置き換えられそう。