ども、cloudpack の かっぱ (@inokara) です。
はじめに
Consul 熱が冷めないうちに引き続き触っていきたいと思いますので前回の続きです。
consul-ui
こんな感じ
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
というサービスが登録されている状態です。
おお。
ということで、各種メニュー毎に簡単にスクショで見ていきたい思います。
SERVICES
既に redis というサービスを登録している状態ですので左ペインに consul
と redis
が見えますので redis
をクリックすると redis
サービスの対象のノードが右ペインに表示されヘルスチェックの状態が色で表示されています。全ての Redis Server が正常に稼働しているのでライトグリーンになっています。
試しに Redis Server を停止させると以下のように検知して色が変わります。
尚、上記は Warning
になってしまっているのはヘルスチェックスクリプトで exit 1
としている為で Critical
にしたい場合には exit 2
にする必要があります。
NODES
クラスタ内のノードの一覧が左ペインに表示されています。その中の一つをクリックすると右ペインにホスト名と共に稼働しているサービスの状態が表示されています。
右上の 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
KEY/VALUE
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)」