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
さらに以下のような設定ファイルを用意します。
[plugin.metrics.docker-state]
command = "/etc/mackerel-agent/conf.d/mackerel-plugin-docker-state"
mackerel-plugin-docker-state
とdocker-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と書かれたグラフが追加されていると思います。
グラフの表示方法を変えると下の画像ように表示されるようになります。
コンテナが起動していない時は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でもコンテナの起動状態を取得できる機能がほしいなと思ってた人に使ってもらえるとうれしいです。