はじめに

こんにちは.@blue271828 です.

昨日12月19日は @FukMo10 さんの エンジニアが学生向け技術インターンを二年連続で企画から運営までやったのでまとめる でした.今日12月20日は,Mackerel を使った Docker の監視について小ネタを紹介したいと思います.

Docker とは

Docker を知らない方に簡単に説明すると,Docker とは Docker, Inc. が提供している軽量な仮想環境みたいなもので,この仮想環境をコンテナと呼びます.厳密には VM(仮想マシン)とは違うんですが,実行環境をそのまま Docker イメージとして保存できるので,アプリを手軽に手元で動作確認したり,デプロイしたり,何かと便利に利用できます.

image.png

Mackerel とは

Mackerel とは,株式会社はてな が提供しているウェブベースのサーバ管理サービスです.監視したいサーバーに Mackerel エージェントをインストールすることで,サーバーの状況を可視化したり,監視をしたりできます.ウェブベースのサービスなので構築いらずで,とても簡単に運用が開始できます.ちなみに Mackerel の名前の由来は サーバー → 鯖 → Mackerel らしいです.

mackerel.png

Docker の監視

そんな便利な Docker と Mackerel ですが,なんと公式に Mackerel エージェント込みの Docker イメージ が公開されており,ホスト側へのインストールいらずで使い始めることができます.Docker コンテナのメトリクスを取得することができる公式の mackerel-plugin-docker も含まれており,設定ファイルに必要な記入を行えば簡単にメトリクス取得が開始されます.

ただ,こちら Docker コンテナ内のプロセス監視の機能が提供されていません.公式イメージには mackerel-check-plugins も含まれておりプロセス監視自体は行えるのですが,Docker の仕様上 Mackerel コンテナから別コンテナ内のプロセスを直接参照することは基本的にはできません.ちょっと困った状況ですが,少し工夫をすればコンテナ内のプロセス監視もできるようになります.ここでは,その方法を紹介したいと思います.

方法1:コンテナ内のプロセスを Docker コマンドで監視する

実は公式イメージでは,Docker コンテナのメトリクスを取得する際に Docker API を利用しており,コンテナ内のプロセスも同様の手続きで mackerel-check-plugins を使って確認することができます.

solution2.png

例えば hoge_cntr コンテナの hoge_app プロセスを確認する場合,以下のような設定を行うと docker exec コマンドを使って確認することが可能です.

[plugin.checks.hoge_app]
command = 'docker exec hoge_cntr ps | grep hoge_app || exit 2'

方法2:HealthCheck オプションを使って監視する

もう一つの方法ですが,Docker の HealthCheck オプションを使う方法があります.Docker API を経由して取得するのは同様ですが,HealthCheck ではコンテナ単位で healthy かどうか確認できるため,コンテナ内に複数プロセスを走らせている場合にまとめて確認することが可能です.注意点としては,そのコンテナが healthy かどうかの仕様はコンテナに依存するため,コンテナに HealthCheck オプションの設定を適用する必要があります.

solution3.png

以下が設定例になります.hoge_app の記述が必要ないため,コンテナ単位での管理ができるようになります.

[plugin.checks.hoge_cntr]
command = 'docker inspect --format "{{json .State.Health.Status}}" hoge_cntr | grep healthy || exit 2'

おわりに

過去に自分が同様の状況になったとき,少し困った経験があったため紹介してみました.ちょっとした工夫って見つからないときは,なかなか見つからなかったりしますよね.

さて明日12月21日は @tily さんの「[HR-Tech] 社員のプロフィールと会社の歴史を共有するためのマイクロサービス Profistory」です.お楽しみに.

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.