Weave Scopeでコンテナ構成をリアルタイム視覚化

Weave Scopeでコンテナ構成をリアルタイム視覚化

Weave Scopeでコンテナ構成をリアルタイム視覚化 はてなブックマーク - Weave Scopeでコンテナ構成をリアルタイム視覚化


サーバの上で、どんなコンテナが動いているかを把握するのは大変ではないでしょうか。自分だけの環境ならまだしも、複数台のサーバ環境を見なくてはいけない場合は面倒。特に複雑にリンクしている場合や、グループやチーム内で共有している環境では、誰が何を立ちあげているのか確認するだけでも一苦労。

その問題を解決するのが、Weave Scope というツール。最近使う機会がありましたので、内容を軽く共有します。

■ Weave ?

Weave(http://weave.works/)という、Weaveworks 社が公開しているオープンソースのプロジェクトがあります。先月 Weave 1.0 としてリリースされました。これは Docker コンテナのネットワークを拡張するプラグイン機能であり、全体として3つのモジュールで構成されています(正確には、それぞれがコマンドラインのツールですが、一体的に運用しても構いませんし、1つ1つ使っても構いません)。

Weave Net(http://weave.works/net/)… コンテナ間のネットワークを自動的に構成するコマンドラインのツール。Docker だけでなく、CoreOS や Kubernetes とも連携できるため、ネットワークとある種のクラスタ管理ツールとも言えそうです。
Weave Scope(http://weave.works/scope/)… Docker やアプリケーションの構成を自動的に視覚化するコマンドラインのツール。
Weave Run(http://weave.works/run/) … コンテナのロードバランシングや、ルーティング、
サービス・ディスカバリ、IP アドレスの管理を行います。

今回は、この中でも操作が簡単で役立ちそうな Weave Scope を紹介します。

■ Weave Scope とは?

Weave Scope はブラウザを通して、ホスト上でどのようなコンテナやアプリケーション(プロセス)が稼働しているかどうか見ることができ、その関連性をリアルタイムでマッピング(地図化)するためのものです。

セットアップは非常に簡単で、コマンドライン上のバイナリをダウンロードして実行するだけです。あとはポート 4040 でブラウザにアクセスすると、様々なコンテナの状態が表示されます。画面には3つのモードがあります。

「APPLICATIONは」のメニューをクリックすると、コンテナ上で動くアプリケーション(デーモン)の関連性を表示します。このとき、左右にドラッグで表示画面を移動し、Windows であればホイールの上下で拡大縮小を行います。

weavescope-01

クリックすると、次のように、プロセスの詳細情報や、稼働しているホストの情報などが表示されます。ちなみにこの環境は、Rancher を動かしているものです。

weavescope-02

「BY NAME」をクリックすると、名前だけで論理的にソートされた構成を表示することもできます。

 

 

weavescope-02-byname

「CONTAINERS」を押すと、稼働しているコンテナの情報が表示されます。

weavescope-03

最後に「HOSTS」を押すと、サーバの IP アドレスとネットワークに関する情報が表示されます。この環境は DigitalOcean 上で、4台のサーバを使い Rancher 環境を作りました。それぞれ次の図のように、Rancher を通して繋がっていることが分かります。

weavescope-04

■ Weave Scope のセットアップ

セットアップは非常に簡単です。バイナリが配布されていますので、curl でダウンロードしてパーミッションを設定するだけです。

$ wget -O scope git.io/scope
$ chmod +x ./scope
$ sudo sp ./scope /usr/local/bin/scope

ブラウザで UI を表示するには、単純に scope を実行するだけで確認できます。

$ scope launch

あとは http://<IPアドレス>:4040/ に接続することで、情報をブラウザから確認できます。

■ Weave Scope のチュートリアルを試すには

複数台の環境がなくても、簡単に複数のコンテナ環境を作って動作確認するチュートリアルが公開されています。チュートリアルを進めるためには、Docker そのものと、複数のコンテナ構成をコードで記述する Docker Compose のセットアップが必要です。

$ wget -qO- https://get.docker.com/ | sh
$ sudo curl -L https://github.com/docker/compose/releases/download/1.3.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

そのあと、Docker Compose を使い環境を準備します。

$ wget -O docker-compose.yml http://git.io/scope-compose
$ docker-compose up -d

正常に動作しているかどうかは、「docker-compose ps」コマンドを実行します。

# docker-compose ps
   Name           Command        State          Ports
-------------------------------------------------------------
root_app1_1   /app db1 db2 db3   Up      8080/tcp
root_app2_1   /app db1 db2 db3   Up      8080/tcp
root_db1_1    /db db1 db2 db3    Up      9000/tcp
root_db2_1    /db db1 db2 db3    Up      9000/tcp
root_db3_1    /db db1 db2 db3    Up      9000/tcp
root_lb1_1    /lb app1 app2      Up      0.0.0.0:8001->80/tcp
root_lb2_1    /lb app1 app2      Up      0.0.0.0:8002->80/tcp

あるいは、「docker ps」コマンドでも、複数のコンテナが起動していることが分かります。

# docker ps
CONTAINER ID        IMAGE                         COMMAND                CREATED             STATUS              PORTS                  NAMES
4e4646bad5e1        peterbourgon/tns-lb:latest    "/lb app1 app2"        18 hours ago        Up 18 hours         0.0.0.0:8001->80/tcp   root_lb1_1
6572819808c6        peterbourgon/tns-lb:latest    "/lb app1 app2"        18 hours ago        Up 18 hours         0.0.0.0:8002->80/tcp   root_lb2_1
24d3268d8bcb        peterbourgon/tns-app:latest   "/app db1 db2 db3"     18 hours ago        Up 18 hours         8080/tcp               root_app1_1
da2bdfc8461f        peterbourgon/tns-app:latest   "/app db1 db2 db3"     18 hours ago        Up 18 hours         8080/tcp               root_app2_1
83b8aa62ae99        peterbourgon/tns-db:latest    "/db db1 db2 db3"      18 hours ago        Up 18 hours         9000/tcp               root_db3_1
cdcc82cc7ed4        peterbourgon/tns-db:latest    "/db db1 db2 db3"      18 hours ago        Up 18 hours         9000/tcp               root_db2_1
8d52027e32c7        peterbourgon/tns-db:latest    "/db db1 db2 db3"      18 hours ago        Up 18 hours         9000/tcp               root_db1_1

あとは、この環境に Weave Scope をセットアップして起動するだけです。

ブラウザで http://<IPアドレス>:4040/ にアクセスします。「APPLICATION」をクリックすると、次のように、コンテナ間が複雑につながっているのが見えます。

weavescope-05

「APPLICATION BY NAME」の「BY NAME」をクリックすると、個々のコンテナの情報ではなく、論理的な構成が表示されます。こうやって見ると、次の図の様に、構成そのものはシンプルだというのが分かると思います。

weavescope-06

この環境を停止するには「docker-compose stop」を実行します。

# docker-compose stop
Stopping root_lb1_1...
Stopping root_lb2_1...
Stopping root_app1_1...
Stopping root_app2_1...
Stopping root_db3_1...
Stopping root_db2_1...
Stopping root_db1_1...

停止した後は、次のようになにも表示されません。

weavescope-07

以上でチュートリアルは完了です。あとはコンテナを立ちあげてみたり、コンテナ間をリンクさせてみたりして、どのように画面上に反映するのか確認してみると面白いと思います。おそらく直近で活躍しそうなのは、Docker Compose の設定が正しいかどうかの確認や、うまくいかない時のデバッグに使えそうに思っています。

■ 参考情報

Weave Scope
http://weave.works/scope/

How To Detect, Map and Monitor Docker Containers with Weave Scope from Weaveworks – The New Stack
http://thenewstack.io/how-to-detect-map-and-monitor-docker-containers-with-weave-scope-from-weaveworks/