ZabbixでMySQLスレーブの Slave_IO_RunningとSlave_SQL_Runningを監視する

表題の件に関するメモ。

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の設定はブラウザで行う。
すでにスレーブは登録されているとする。

スレーブ選択

「設定」ー>「ホスト」でスレーブを選ぶ。

アイテム作成

スレーブの「アイテム」部分をクリックし、全アイテムを表示させる。
右上の「アイテムの作成」をクリックする。

  • 名前:適当に。"MySQL Slave IO/SQL threads check"とか
  • タイプ:Zabbixエージェント
  • キー:mysql.slave

あとは適当に。

トリガの作成

もう一度、スレーブを選択し、今度は「トリガ」部分をクリック。
右上の「トリガの作成」をクリックする。

名前は適当に。"Slave IO thread is down"とか。


条件式は以下のように:

  • アイテム: さっきつけた名前"MySQL Slave IO/SQL threads check"
  • 条件式:"最新の値=N"
  • T = 0
  • N = 2

これは、「ret = N = 2」==> 「Slave_IO_Running="No"」をチェックするトリガ。

以下、同様に計5つのトリガを仕掛ける。たとえばトリガ名"Slave SQL thread is down"でN=3などなど。

*1:AllowRoot=1ならば、rootユーザで実行できるので、普通にやる/root/.my.cnfにすればよい。なお、AllowRootを使う場合はSELinux=disabled必須。