読者です 読者をやめる 読者になる 読者になる

Dockerをモニタリングする

Docker( https://www.docker.com/ )をモニタリングする方法を紹介します。

Dockerコンテナの消費リソースを把握するには、Dockerが利用しているcgroupの統計情報を参照します。 技術的な詳細は公式ドキュメント(https://docs.docker.com/articles/runmetrics/)を参照してください。

mackerel-plugin-dockerを利用する

Mackerelはmackerel-plugin-dockerを利用することで、cgroupの統計情報を取得しカスタムメトリックグラフとして可視化することができます。 mackerel-plugin-dockerは公式プラグイン集に含まれていますので、まずは公式プラグイン集をインストールします。具体的な手順はミドルウェアのメトリック可視化に公式プラグイン集を使うを参照してください。

公式プラグイン集がインストールできたら、以下の設定を/etc/mackerel-agent/mackerel-agent.confに追記します。

[plugin.metrics.docker]
command = "/usr/local/bin/mackerel-plugin-docker"

これにより、そのホスト上で動作するDockerコンテナのCPU使用率、メモリ消費量、IO使用量(IOPS、転送バイト数とキュー長)が可視化されます。

コンテナを新規に起動すると自動的にグラフに項目が追加され、コンテナを終了すると数時間後に自動的にその項目が見れなくなります。

https://f.st-hatena.com/images/fotolife/m/mackerelio/20150917/20150917161045_original.png https://f.st-hatena.com/images/fotolife/m/mackerelio/20150917/20150917161041_original.png

mackerel-agentのDockerイメージ

mackerel-agentのDockerイメージを以下で提供しています。

https://hub.docker.com/r/mackerel/mackerel-agent/

これを利用することで、mackerel-agentを1つのコンテナとして起動することができ、下図のようにホストや他のコンテナを監視することができます。

http://f.st-hatena.com/images/fotolife/m/mackerelio/20150917/20150917161407.png

mackerel-agentをコンテナとして起動する

mackerel-agentイメージによりコンテナを起動するには次のコマンドを実行します。 <APIKEY>を所属するオーガニゼーションのAPI KEYで置き換えます。

docker run -h `hostname` \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/mackerel-agent/:/var/lib/mackerel-agent/ \
  -v /proc/mounts:/host/proc/mounts:ro \
  -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
  -e 'apikey=<APIKEY>' \
  -d \
  mackerel/mackerel-agent

他のコンテナのプロセスを監視する

他のコンテナのプロセスを監視するには、Dockerのlinkオプションを利用します。 link オプションを利用することで他のコンテナのIPアドレスやポート番号を環境変数経由で取得できます。 各環境変数は、prefixが <name>_PORT_<port>_<protocol> となり、prefixにIPアドレス(ADDR)、ポート番号(PORT)、プロトコル(PROTO)をそれぞれ加えた環境変数( prefix_ADDR, prefix_PORT, prefix_PROTO )で取得できます。

link オプションの詳細はDockerのドキュメントをご参照ください。 (https://docs.docker.com/userguide/dockerlinks/)

ここではmemcachedの例を紹介します。

まずmemcachedコンテナをmemcachedという名前で起動します。

docker run -d -P \
  --name memcached -p 11211:11211 \
  sylvainlasnier/memcached

次にMackerelのmemcachedプラグインの設定ファイルを準備します。 このファイルはホスト側に置きます。Dockerのlinkオプションにより、環境変数MEMCACHED_PORT_11211_TCP_ADDRでそのコンテナのIPアドレスが取得できます。

% cat /etc/mackerel-agent/conf.d/memcached.conf
[plugin.metrics.memcached]
command = "/usr/local/bin/mackerel-plugin-memcached -host=$MEMCACHED_PORT_11211_TCP_ADDR"

最後にこのmemcachedコンテナとリンクしたmackerel-agentコンテナを起動します。 ここで-vオプションとincludeを利用して上の設定ファイルを読み込みます。

docker run -h `hostname` \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/mackerel-agent/:/var/lib/mackerel-agent/ \
  -v /proc/mounts:/host/proc/mounts:ro \
  -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
  -e 'apikey=<APIKEY>' \
  --link memcached:memcached \
  -v /etc/mackerel-agent/conf.d:/etc/mackerel-agent/conf.d:ro \
  -e 'include=/etc/mackerel-agent/conf.d/*.conf' \
  -d \
  mackerel/mackerel-agent

これでmemecachedコンテナを監視するmackerel-agentコンテナを起動することができますr。