Zabbixだと標準でTemplate_App_MySQLというテンプレートが入っているのですが、残念ながらzabbix-agentd側に対応するUserParametersが設定されていないと使えません。
TMTOWTDI(正解はひとつじゃない)というPerlの標語のとおり、自分のやり方でUserParametersを設定すれば良いのですが、取っ掛かりとして自分のやり方を紹介します。
MySQLに接続できるようにする(MySQLユーザの準備)
Debian/Ubuntuでは、管理系のツールで共通に使える「debian-sys-maint」というMySQLユーザが用意されているのでそれを使います。このユーザの情報は、/etc/mysql/debian.cnf にrootだけが読める状態で用意されています。
RedHat/CentOSではそういうのは無いので、自分でユーザを作るかrootユーザを使って下さい。以下ではdebian-sys-maintユーザがある前提で進めます。
zabbix-agentdはzabbixユーザで動作するため/etc/mysql/debian.cnfとは別に、zabbixユーザが読めるファイルを作成します。どこでも良いですが、zabbixユーザのホームディレクトリ(この記事では /opt/zabbix )を使います。
% sudo cp /etc/mysql/debian.cnf /opt/zabbix/.my.cnf % sudo chown root:zabbix /opt/zabbix/.my.cnf % sudo chmod 640 /opt/zabbix/.my.cnf
UserParameterを書いた設定ファイルを用意する
メインの設定ファイルzabbix-agend.confにそのままUserParameterを追記しても良いのですが、分けておくのが好きなのでInclude ディレクティブで読まれる別ディレクトリに、新しい設定ファイルを用意します。ここでは、/opt/zabbix/agent_include/userparameter_mysql.conf とします。
こんな感じで書きます。
UserParameter=mysql.status[*],mysqladmin --defaults-extra-file=/opt/zabbix/.my.cnf extended-status 2>/dev/null | awk '/ $1 /{print $$4}' UserParameter=mysql.ping,mysqladmin --defaults-extra-file=/opt/zabbix/.my.cnf ping | grep alive | wc -l UserParameter=mysql.version,mysqladmin -V UserParameter=mysql.slave[*],mysql --defaults-extra-file=/opt/zabbix/.my.cnf -e "show slave status\G" | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/
値が取れるか確認する。
Zabbixサーバが動いてるホストで、zabbix_getコマンドで動作を確認します。
% zabbix_get -s <対象のホスト名> -k 'mysql.ping' 1 % zabbix_get -s <対象のホスト名> -k 'mysql.version' mysqladmin Ver 8.42 Distrib 5.5.29, for debian-linux-gnu on x86_64 % zabbix_get -s <対象のホスト名> -k 'mysql.status[Uptime]' 241382 % zabbix_get -s <対象のホスト名> -k 'mysql.slave[Slave_IO_State]' Waiting for master to send event
こんな感じで値が取れれば大丈夫です。*1
テンプレートを紐付ける
あとは、Zabbixの管理画面でTemplate_App_MySQLテンプレートに紐付けてしばらく待つだけです。
スレーブサーバのテンプレート(おまけ)
実は上記に含まれる mysql.slave[*] は標準の Template_App_MySQL テンプレートでは設定されていないので、手元で使っているスレーブサーバ用テンプレート Template_App_MySQL_Slave を公開しておきます。
IO/SQLスレッドが止まったら怒るトリガーも入ってます。
Chefクックブック(おまけ)
上記をやってくれるChefクックブックも置いときます。
opscode-cookbook/mysql を使っている人であれば、node.mysql.server_debian_password をそのまま使うようにしたので 「include_recipe 'zabbix::agent_mysql'」するだけでよいです。
2013-05-01 追加
PullRequest投げました。