概要
Docker Compose を利用し、web-server コンテナと mackerel-agent コンテナを立ち上げた上で、mackerel-plugin-accesslog を利用して web-server のアクセスログをメトリックとして投稿し、モニタリングしてみる。
前準備
以下の導入に関しては本記事では割愛します。
- docker-compose コマンド叩ける環境
- httpd インストール済みイメージ(今回は Apache/2.4.6)
- Mackerel アカウント
docker-compose
準備した docker-compose.yml はこんな感じ。
version: '2'
services:
web-server:
image: web-server
ports:
- "80:80"
volumes:
- web-server-log:/var/log/httpd
mackerel-agent:
image: mackerel/mackerel-agent
hostname: web-server-monitor
environment:
- apikey=your_apikey
- enable_docker_plugin=true
- include=/etc/mackerel-agent/conf.d/*.conf
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/mackerel-agent/:/var/lib/mackerel-agent/
- ./mackerel_conf:/etc/mackerel-agent/conf.d
- web-server-log:/web_server_log
depends_on:
- web-server
volumes:
web-server-log:
web-server イメージには、予め httpd がインストール済みで、起動時のコマンドで httpd が start する。
web-sever コンテナ内の /var/log/httpd を volume 用コンテナ web-server-log を経由させ、mackerel-agent コンテナ内で参照できるようにしている。
mackerel-agent environment で、include=/etc/mackerel-agent/conf.d/*.conf
とすることで、コンテナ内の /etc/mackerel-agent/conf.d ディレクトリ下の .conf ファイル内の設定を、コンテナ起動時に読み込む。
今回はホスト側 docker-compose.yml ファイルと同じ階層に mackerel_conf ディレクトリを作成し、これをコンテナ内 /etc/mackerel-agent/conf.d にマウントする。
設定ファイル
https://github.com/mackerelio/mackerel-agent-plugins/tree/master/mackerel-plugin-accesslog
README にある通り、mackerel-agent の設定ファイルに2行程追加するだけの簡単なお仕事。
今回の/path/to/access.log
は、web-server-log から mackerel-agent コンテナ内にマウントされている /web_server_log ディレクトリ内の access_log ファイルにあたる。
ホスト側の mackerel-agent 設定ファイル用ディレクトリ mackerel_conf 下に、以下の内容で設定ファイルを作成する。ファイル名は末尾が.confなら何でも良い。
[plugin.metrics.accesslog]
command = "mackerel-plugin-accesslog /web_server_log/access_log"
起動
おもむろに docker-compose up
$ docker-compose up -d
コンテナが立ち上がった頃に、Mackerel の管理画面からメトリック一覧を見てみると・・・
きてます!
まとめ
- Docker × Mackerel の相性◎
- HTTPステータスコードに応じて監視ルールを設定することができる
- 他にも多くの便利な agent plugin あります
- mackerel-plugin-apache2 を使えば、apache のメトリックも簡単に取得できるので、またの機会に