Docker上のMySQL稼働情報をmuninで見る


適当にmuninのプラグインを入れれば localhost の MySQL を見てくれて、あんまり苦労しないが、 docker run -d mysql 的なことをやっている場合、ちょっと一手間かかるよな、と思ったのでやったことをメモ。

参考URL

1. プラグイン、MySQL Client のインストール

ubuntu@mysql-docker:$ sudo apt-get install mysql-client munin-plugins-extra
ubuntu@mysql-docker:$ cd /etc/munin/plugins
ubuntu@mysql-docker:$ sudo ln -s /usr/share/munin/plugins/mysql_ mysql_
ubuntu@mysql-docker:$ sudo ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ubuntu@mysql-docker:$ sudo ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ubuntu@mysql-docker:$ sudo ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ubuntu@mysql-docker:$ sudo ln -s /usr/share/munin/plugins/mysql_threads mysql_threads

2. 接続ユーザーの作成

mysql -h localhost とやると、.sock を使った接続になってしまうのでちゃんと 127.0.0.1 を指定すること。

ubuntu@mysql-docker:$ mysql -u root -p -h 127.0.0.1 

接続にいくのは、Dockerコンテナの外からIP経由になるので、とりあえず接続元は '%''localhost' にしてあるが、適切なファイアウォール設定などで本当の外部から接続できないことを確認したほうがよい。

mysql> CREATE DATABASE munin;
mysql> GRANT SELECT ON munin.* TO munin@'%' IDENTIFIED BY '<munin_no_password>';
mysql> GRANT SELECT ON munin.* TO munin@'localhost' IDENTIFIED BY '<munin_no_password>';
mysql> FLUSH PRIVILEGES;

3. munin-node の設定

設定ファイルを編集し、ユーザーや接続先を書き込む。

ubuntu@mysql-docker:$ sudo vim /etc/munin/plugin-conf.d/munin-node

編集するのは[mysql*]セクションのみ、既存のはコメントアウトしてしまっていいようだ。

munin-node.conf
...(中略)...
[mysql*]
user root
env.mysqlopts -u munin --password=<munin_no_password> -h 127.0.0.1
# env.mysqlopts --defaults-file=/etc/mysql/debian.cnf
# env.mysqluser debian-sys-maint
# env.mysqlconnection DBI:mysql:mysql;mysql_read_default_file=/etc/mysql/debian.cnf
...(中略)...

4. 確認

それぞれ値が表示されれば成功。

ubuntu@mysql-docker:$ sudo /usr/sbin/munin-run mysql_queries
ubuntu@mysql-docker:$ sudo /usr/sbin/munin-run mysql_slowqueries
ubuntu@mysql-docker:$ sudo /usr/sbin/munin-run mysql_threads
ubuntu@mysql-docker:$ sudo /usr/sbin/munin-run mysql_bytes

5. 反映

munin-node を再起動させてやればよい。

ubuntu@mysql-docker:$ sudo /etc/init.d/munin-node stop
ubuntu@mysql-docker:$ sudo /etc/init.d/munin-node start

6. 結果確認

これで munin の画面にいろいろでてる「はず」。

反省

んん??いま思えば、どうせデータのディレクトリをマウントして実行してるんだから、その .sock 指定してやればはやいんじゃ・・・。それはまた今度やってみよう。