ども、cloudpackかっぱ (@inokara) です。

はじめに

Consul 熱が冷めないうちに引き続き触っていきたいと思いますので前回の続きです。

consul-ui

こんな感じ

Consul には UI が別パッケージで提供されています。(リポジトリは consul に含まれているようですが…)
俺の consul チートシート(2): consul-ui

こんな感じです。

試した環境

全て 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 を起動してブラウザでアクセスすると以下のように表示されます。
俺の consul チートシート(2): ブラウザからConsulの動作確認
上記は既に redis というサービスが登録されている状態です。
おお。

ということで、各種メニュー毎に簡単にスクショで見ていきたい思います。

SERVICES

俺の consul チートシート(2): consul-ui の SERVICES
既に redis というサービスを登録している状態ですので左ペインに consulredis が見えますので redis をクリックすると redis サービスの対象のノードが右ペインに表示されヘルスチェックの状態が色で表示されています。全ての Redis Server が正常に稼働しているのでライトグリーンになっています。

試しに Redis Server を停止させると以下のように検知して色が変わります。
俺の consul チートシート(2): consul-ui の SERVICES(対象サーバの停止の様子)

尚、上記は Warning になってしまっているのはヘルスチェックスクリプトで exit 1 としている為で Critical にしたい場合には exit 2 にする必要があります。

NODES

俺の consul チートシート(2): consul-ui の 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 チートシート(2): consul-ui の KEY/VALUE

Consul の機能の一つである KVS も UI で管理することが出来ます(データの登録、削除、更新)。左ペインには既に登録されたキーが表示されていて、クリックする値の確認が出来ます。又、値の更新も行うことが出来ます。
俺の consul チートシート(2): consul-ui の KEY/VALUE(更新の様子)
ちなみに、コマンドラインから 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)