makoラボ

日常や勉強会や技術ネタ

MackerelでDocker for Macを監視する

まえがき

最近、開発環境でDockerを使うこともあって手元のDockerにPCリソースを割り振る割合が増えてきていて、「本当にこんなに必要か?」と思っていました。

情報を集めるために、一日に普通に開発していた場合のリソースの変化をみたいなと思ってたところ、MackerelをMacに入れていることを思い出したのがはじまり。

macOSにmackerel-agentをインストールする方法はこちら

MackerelでDocker for Macを監視する

公式サイトに書かれてるDockerを監視する方法は以下の2つ

  • mackerel-plugin-dockerを利用する
  • mackerel-agentのDockerイメージを利用する

上記の方法を順番に試してみました。

mackerel-plugin-dockerを利用する

macOSは公式サポート対象外なので公式プラグイン集の公式でインストール方法は提供されてません。

しかしながら公式リポジトリーにソースコードはあるので、自前でソースコードを落としてきてMac向けコンパイルします。

公式サイトに書いてある設定をmackerel-agent.confに追記します

[plugin.metrics.docker]
command = ["/path/to/mackerel-plugin-docker", "-name-format", "name"]

実行してみたところ下記のエラーが

2019/09/27 11:21:00 INFO <metrics.plugin> command /path/to/mackerel-plugin-docker -name-format name outputted to STDERR: "2019/09/27 11:21:00 Docker command is not found: docker\n"

エラーをみたところmackerelエージェントからdockerコマンドが見えてないようです。

macOSだと/usr/local/bin/dockerにDockerがインストールされるのですが、mackerel-agent側からだと/binに入っている前提で動いているようで実行できていないようでした。

ソースコードの該当箇所を/usr/local/bin/dockerに書き換えて実行してみたところ動作はしたのですが、もうちょっとスマートな書き方が無いかなとMackerelアンバサダーのsms氏に相談したところ下記の書き方を教えていただきました。

[plugin.metrics.docker]
command = ["/path/to/mackerel-plugin-docker", "-name-format", "name" , "-command", "/usr/local/bin/docker"]

上記の設定をすることで無事動作しました。

mackerel-agentのDockerイメージを利用する

こちらはmackerel-agentのDockerイメージを利用する方式です。

公式がDockerHubにイメージを用意してくれているのでそちらを利用します。

毎回、起動するのがめんどくさい&オプションを指定するのもめんどくさいのでdocker-compose.ymlを用意します。

version: '3'
services:
  mackerel-agent:
    image: mackerel/mackerel-agent
    container_name: mackerel-agent
    hostname: <任意のホスト名>
    environment:
      - apikey=<MackerelのAPIKEY>
      - enable_docker_plugin=1
      - auto_retirement=0
      - opts=-v
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./mackerel-agent/:/var/lib/mackerel-agent/
    restart: always

./mackerel-agent/:/var/lib/mackerel-agent/はホストのIDが保存さてるファイルが置かれるので、書き込み権限があるディレクトリを指定してます。

docker-compose.ymlがあるディレクトリで下記のコマンドを実行します。

$ doker-copose up -d

Mackerelの管理画面でホストが追加されてメトリックスが取れていれば成功です。

まとめ

両者の違いとしては

  • mackerel-plugin-dockerを利用する
    • Mac(HostPC)のカスタムメトリックスに追加される
  • mackerel-agentのDockerイメージを利用する
    • 新たに一つホストが追加される
    • Dockerに割り当ててる領域のシステムメトリックスが取れる

です。

両方やってみた感想ですが、個人的にはDockerに割り当ててる領域のシステムメトリックスも取れるし、インストールも簡単なDockerイメージの方がオススメです。

ただし、MacはMackerel公式ではサポート対象外なので自己責任でやりましょう。