ども、cloudpack の かっぱ (@inokara) です。
Consul 熱が冷めないうちに引き続き触っていきたいと思いますので前回の続きです。
Consul には UI が別パッケージで提供されています。(リポジトリは consul に含まれているようですが…)
こんな感じです。
全て boot2docker の Docker のコンテナで試しています。
| ホスト名 | IP | consul |
|---|---|---|
| a72ccb8b648c | 172.17.0.8 | Leader ノード / consul-ui 稼働 |
| a69428f7b181 | 172.17.0.9 | Follower |
| b31e1eaffbd5 | 172.17.0.10 | Follower |
やっほい。
mkdir /opt/consul-ui cd /opt/consul-ui wget https://dl.bintray.com/mitchellh/consul/0.4.1_web_ui.zip unzip 0.4.1_web_ui.zip
展開すると以下のような構成になっています。
# tree ./consul-ui/
./consul-ui/
├── 0.4.1_web_ui.zip
└── dist
├── index.html
└── static
├── application.min.js
├── base.css
├── bootstrap.min.css
├── consul-logo.png
├── favicon.png
└── loading-cylon-purple.svg
2 directories, 8 files
起動は以下のように consul 自身を起動する際に -ui-dir オプションを指定して起動します。
consul agent -config-file /etc/consul.d/consul.json -ui-dir /opt/consul-ui/dist/ -client 0.0.0.0 &
尚、上記のオプションで起動した場合にはバインドされるホストはローカルホストの 8500 ポートになりますので boot2docker とかでポートフォワーディング使っている場合等は -client オプションを付けて以下のように起動します。
consul agent -config-file /etc/consul.d/consul.json -ui-dir /opt/consul-ui/dist/ -client 0.0.0.0 &
Consul を起動してブラウザでアクセスすると以下のように表示されます。
上記は既に redis というサービスが登録されている状態です。
おお。
ということで、各種メニュー毎に簡単にスクショで見ていきたい思います。
既に redis というサービスを登録している状態ですので左ペインに consul と redis が見えますので redis をクリックすると redis サービスの対象のノードが右ペインに表示されヘルスチェックの状態が色で表示されています。全ての Redis Server が正常に稼働しているのでライトグリーンになっています。
試しに Redis Server を停止させると以下のように検知して色が変わります。
尚、上記は Warning になってしまっているのはヘルスチェックスクリプトで exit 1 としている為で Critical にしたい場合には exit 2 にする必要があります。
クラスタ内のノードの一覧が左ペインに表示されています。その中の一つをクリックすると右ペインにホスト名と共に稼働しているサービスの状態が表示されています。
右上の DREGISTER をクリックすると確認と共にクラスタからノードが切り離されるように見えますが、実際に試してみるとサービス(今回の例では redis サービス)のメンバーから切り離されるようです。
# consul members
2014/12/30 19:09:37 [INFO] agent.rpc: Accepted client: 127.0.0.1:51832
Node Address Status Type Build Protocol
a69428f7b181 172.17.0.9:8301 alive server 0.4.1 2
a72ccb8b648c 172.17.0.8:8301 alive server 0.4.1 2
b31e1eaffbd5 172.17.0.10:8301 alive server 0.4.1 2
一応、メンバーではあるようですな。
# curl -s http://127.0.0.1:8500/v1/catalog/service/redis | python -mjson.tool
[
{
"Address": "172.17.0.10",
"Node": "b31e1eaffbd5",
"ServiceID": "redis",
"ServiceName": "redis",
"ServicePort": 6379,
"ServiceTags": null
},
{
"Address": "172.17.0.8",
"Node": "a72ccb8b648c",
"ServiceID": "redis",
"ServiceName": "redis",
"ServicePort": 6379,
"ServiceTags": null
}
]
ところが、ところが、redis サービスのメンツからは外されています。ありゃりゃ。ということで、あらためてサービスを登録する場合には以下のように実行してサービスを登録します。
cat << EOT | curl -XPUT http://127.0.0.1:8500/v1/agent/service/register -d @-
{
"name": "redis",
"port": 6379,
"check": {
"script": "/opt/bin/check_redis.sh",
"interval": "10s"
}
}
EOT
Consul の機能の一つである KVS も UI で管理することが出来ます(データの登録、削除、更新)。左ペインには既に登録されたキーが表示されていて、クリックする値の確認が出来ます。又、値の更新も行うことが出来ます。
ちなみに、コマンドラインから curl を使って以下のように取得することが出来ます。
# curl -s localhost:8500/v1/kv/foo| python -m json.tool | python -c "exec(\"import json,sys\\nv=json.load(sys.stdin)\\nprint v[0].get('Value')\")" | base64 -d
bar
Consul とは無関係ですが Python のワンライナーはこちら「python のワンライナーで、json の任意のキーの値を出力する」を参考にさせて頂きました。ありがとうございます。
その他に追いやってしまってすいませんが、ACL や DC 等のメニューがありますが引き続き触れていきたいと思います。
ざくっと consul-ui を試してみましたが、コマンドラインから curl 等を使って操作の補助や状態を視覚的に確認するツールとして consul-ui を使うのも悪くないなと思いました。
元記事はこちらです。
「俺の consul チートシート(2)」