Help us understand the problem. What is going on with this article?

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でもコンテナの起動状態を取得できる機能がほしいなと思ってた人に使ってもらえるとうれしいです。

参考

abcang
JavaScriptとかRubyとかがすきです
https://abcang.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away