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、転送バイト数とキュー長)が可視化されます。
コンテナを新規に起動すると自動的にグラフに項目が追加され、コンテナを終了すると数時間後に自動的にその項目が見れなくなります。
mackerel-agentのDockerイメージ
mackerel-agentのDockerイメージを以下で提供しています。
https://hub.docker.com/r/mackerel/mackerel-agent/
これを利用することで、mackerel-agentを1つのコンテナとして起動することができ、下図のようにホストや他のコンテナを監視することができます。
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。