表題の件に関するメモ。
Zabbixは便利だけどTempalete_App_MySQLでは、レプリケーションしたときに一番知りたいSlave_IO_RunningとSlave_SQL_Runningの値を監視できない。
なのでUserParameterを設定して監視することにした。
Zabbixのインストール方法などはZabbix2.2をyumでインストール(Linux CentOS6.4)を参照。
UserParameter
Slaveが走るホストの/etc/zabbix/zabbix_agentd.confに以下のUserParameterを設定する。
長いので改行するけども、設定するときは一行で。特にパイプ"|"の前後に空白をいれないこと。
UserParameter=mysql.slave,mysql --defaults-extra-file=/var/lib/zabbix/.my.cnf -e "SHOW SLAVE STATUS\G"|awk 'BEGIN{io="None";sql="None"} {if($1 ~/^Slave_IO_Running:$/){io=$2} else if($1 ~/^Slave_SQL_Running:$/){sql=$2}} END{if(io=="Yes" && sql=="Yes"){ret=0} else if(io=="No" && sql=="Yes"){ret=2} else if(io=="Yes" && sql=="No"){ret=3} else if(io=="No" && sql=="No"){ret=4} else if(io=="Connecting"){ret=1} else{ret=5}; print ret}'
Keyは"mysql.slave"。
返り値は:
- 0なら正常、
- 1ならSlave_IO_Running="Connecting"、
- 2ならSlave_IO_Running="No"、
- 3ならSlave_SQL_Running="No"、
- 4ならどちらも"No"、
- 5ならCHANGE MASTERで値が設定されていないか、サーバがダウンしているか
zabbix_agentを稼働させるユーザ(zabbix)がmysqlコマンドを実行できるように、/var/lib/zabbix/.my.cnfを作成し、MySQLのユーザ名(ここではroot)とパスワードを設定する*1。
root> chown zabbix:zabbix /var/lib/zabbix/.my.cnf root> chmod 600 /var/lib/zabbix/.my.cnf root> cat /var/lib/zabbix/.my.cnf [mysql] host = localhost user=root password=XXXXX socket = /var/lib/mysql/mysql.sock
Zabbixサーバ側
Zabbixの設定はブラウザで行う。
すでにスレーブは登録されているとする。
スレーブ選択
「設定」ー>「ホスト」でスレーブを選ぶ。
アイテム作成
スレーブの「アイテム」部分をクリックし、全アイテムを表示させる。
右上の「アイテムの作成」をクリックする。
あとは適当に。