Posted at

MackerelでDockerコンテナの起動状態を監視する

More than 3 years have passed since last update.

Mackerel公式のDockerのプラグイン(mackerel-plugin-docker)ではコンテナが起動しているかどうかの情報は取得できません。

そこで、自分でプラグインを作ってみました。

https://github.com/ABCanG/mackerel-plugin-docker-state

ここではmackerel-agentイメージを使った方法を紹介します。


準備

設定用ディレクトリを用意し、mackerel-plugin-docker-stateを配置します。

$ mkdir -p /etc/mackerel-agent/conf.d

$ cd /etc/mackerel-agent/conf.d
$ curl https://raw.githubusercontent.com/ABCanG/mackerel-plugin-docker-state/master/mackerel-plugin-docker-state -o /etc/mackerel-agent/conf.d/mackerel-plugin-docker-state
$ chmod +x /etc/mackerel-agent/conf.d/mackerel-plugin-docker-state

さらに以下のような設定ファイルを用意します。


/etc/mackerel-agent/conf.d/docker-state.conf

[plugin.metrics.docker-state]

command = "/etc/mackerel-agent/conf.d/mackerel-plugin-docker-state"

mackerel-plugin-docker-statedocker-state.confがあればOKです

$ ls /etc/mackerel-agent/conf.d

mackerel-plugin-docker-state docker-state.conf


起動

Dockerでmackerel-agentを起動します。

/etc/mackerel-agent/conf.dにディレクトリがマウントされるようにします。

また、includeを指定して設定ファイルが読み込まれるようにします。

docker run -h `hostname` \

-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/mackerel-agent/:/var/lib/mackerel-agent/ \
-e 'apikey=<APIKEY>' \
-e 'enable_docker_plugin=true' \
-v /etc/mackerel-agent/conf.d:/etc/mackerel-agent/conf.d:ro \
-e 'include=/etc/mackerel-agent/conf.d/*.conf' \
--name mackerel-agent \
-d \
mackerel/mackerel-agent

すると、Mackerelの画面にDocker Running Stateと書かれたグラフが追加されていると思います。

グラフの表示方法を変えると下の画像ように表示されるようになります。

スクリーンショット 2016-08-21 23.40.46.png

コンテナが起動していない時は0に、している時は1になるので、コンテナをモニターすることでコンテナが終了したら通知することができます。


mackerel-plugin-docker-stateの仕組み

mackerel-plugin-docker-stateはdockerコマンドが使える環境でないと利用できません。

シェルスクリプトとして動作し、docker psコマンドを実行した結果を整形しています。

mackerel-agentイメージではdockerコマンドが利用できるため、mackerel-plugin-docker-stateを使うことができます。


おわりに

Mackerelのプラグインを結構簡単に作ることができて驚きました。

Mackerel公式のDockerのプラグインではコンテナの起動状態を取得することができませんでしたが、自分で作ったプラグインを使うことで、コンテナの起動状態を監視できるようになりました。

datadogのようにMackerelでもコンテナの起動状態を取得できる機能がほしいなと思ってた人に使ってもらえるとうれしいです。


参考