最近、Docker Swarmの運用を始めて一台のマシンに存在するコンテナが増えてきたので、監視用のmuninのプラグイン作りました。
取得できる項目
docker statsと同等の情報が取得できます。NET I/OとBLOCK I/Oは積算値ではなく、前回との差分値を出力します。
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 13f260e1b3d0 0.12% 6.656 MiB / 31.42 GiB 0.02% 6.51 MB / 9.65 MB 0 B / 0 B 0 6cf6538e3e49 0.14% 6.574 MiB / 31.42 GiB 0.02% 6.66 MB / 9.78 MB 0 B / 0 B 0 281b654e09b0 0.00% 86.28 MiB / 31.42 GiB 0.27% 31.4 MB / 13.3 MB 0 B / 250 MB 0 e22e2c422c87 0.11% 100.7 MiB / 31.42 GiB 0.31% 176 MB / 115 MB 0 B / 1.61 GB 0 24b3ddd12df9 0.01% 15.14 MiB / 31.42 GiB 0.05% 3.51 GB / 3.31 GB 0 B / 0 B 0 802c79ba9e22 0.29% 174.6 MiB / 31.42 GiB 0.54% 176 MB / 98.4 MB 0 B / 45.1 kB 0 e3e675c2f0be 0.04% 150.3 MiB / 31.42 GiB 0.47% 891 kB / 1.52 MB 0 B / 56.7 MB 0
インストール方法
ここからリリースファイルをダウンロードします。
配置は通常のMuninプラグインと同じです。
chmod +x ./docker_stats sudo mv ./docker_stats /usr/share/munin/plugins/ sudo ln -s /usr/share/munin/plugins/docker_stats /etc/munin/plugins/docker_stats sudo /etc/init.d/munin-node restart
設定
プラグインの設定ファイルに、dockerコマンドを叩けるユーザを設定してください。
cat <<EOF > /etc/munin/plugin-conf.d/docker_stats [docker_stats] user docker EOF
動作確認
ncコマンド等でmunin-nodeに接続して動作確認してみます。
$ nc localhost 4949 # munin node at yourhostname config docker_stats ... ... fetch docker_stats ... ...
その他
DockerのSwarmモードで運用している都合上、仕様もそれに合わせたものになっています。
グラフのキー
同一イメージから複数のコンテナを立ち上げた場合などはイメージ名と番号とハッシュが振られますが、イメージ名と番号で識別するようにしています。
nginx.1.r50244fy04sj80wj8sqik952w nginx.2.z163fmegq9efrvb7y6fw4hgam nginx.3.yhq1mcmevwm5eybhjphofsfti
この辺り調整すれば他のルールに変更することもできます。
https://github.com/yomon8/docker_stats/blob/v0.1.0/graph/graph.go#L24-L36
不要なグラフのキーを削除
クラスタ運用を前提に作っている関係で、コンテナが他のマシンに移動してしまった時にも、古いグラフを削除しないようにコンテナの情報を containerlist
というファイルにjson形式で保持しています。不要なグラフ消したい場合はこちらの中身(json形式)を調整してください。
MUNIN_PLUGSTATE
の変数は通常 /var/lib/munin/plugin-state/<username>
のディレクトリを指します。
rm ${MUNIN_PLUGSTATE}/containerlist
所感
Golangだとdockerコマンドの内部処理そのまま使えるので、こういった開発はかなり楽にできました。