MySQL Status (Monitor)是否異常可以靠自己寫程式檢查 + 解決,不過都已經架了一台 Nagios,就該把檢查的工作全部交給它,才不會東漏一隻、西漏一隻的。
註:此設定主要針對 MySQL 的 DB Slave
Nagios 加上 MySQL Slave Replication Status 檢查
這程式主要是檢查 MySQL Slave status,此 Nagios 的 Script 檢查的項目還不少,不過我只需要確認 Replication 是否正常就夠了,所以更多的檢查就不細看了。
於 Nagios 的 MySQL Slave Status Script
- Check MySQL Replication Slave Status - Nagios Exchange
- ck :: Nagios Plugin check_mysql_slavestatus MySQL Slave Status Check ::
Nagios 設定使用 MySQL Slave Status Script 的步驟
Nagios 檢查方式有兩種:
- 遠端透過此 Shell script 去抓取 Slave Status 資料,然後來確認。
- 遠端呼叫 Slave,Slave 執行抓取 localhost Status 資料,傳送回去確認。
- 註:避免網路或其它問題就造成誤報,所以下述是讓每台機器自己跑 localhost 檢查(此採用第二種方式)。
[Slave 設定步驟]
- ssh slave
MySQL 權限需要給 SUPER 或 REPLICATION CLIENT
- $ mysql -u root -p
- mysql> GRANT REPLICATION CLIENT on *.* TO 'nagios'@'127.0.0.1' IDENTIFIED BY 'password'; # 或 GRANT SUPER on *.* TO 'nagios'@'%' IDENTIFIED BY 'password';
- mysql> flush privileges;
抓取 Nagios MySQL Slave Status Script
- cd /tmp
- wget http://www.claudiokuenzler.com/nagios-plugins/check_mysql_slavestatus.sh
chmod +x ./check_mysql_slavestatus.sh - ./check_mysql_slavestatus.sh -H localhost -P 3306 -u nagios -p password # test,會印出下述
# OK: Slave SQL running: Yes Slave IO running: Yes / master: 123.127.123.123 / slave is 0 seconds behind master | delay=0s - mv check_mysql_slavestatus.sh /usr/lib/nagios/plugins/check_mysql_slavestatus.sh
設定 Nagios
- vim /etc/nagios/nrpe.d/mysql_slave.cfg # 增加下述其中一行,不要兩行都增加。 -c 500 是 replication Delay 超過 500 secs 才警告
- command[check_mysql_slave_status]=/usr/lib/nagios/plugins/check_mysql_slavestatus.sh -H 127.0.0.1 -P 3306 -u nagios -p password
- command[check_mysql_slave_status]=/usr/lib/nagios/plugins/check_mysql_slavestatus.sh -H 127.0.0.1 -P 3306 -u nagios -p password -c 500
/etc/init.d/nagios-nrpe-server restart - 上述兩個設定挑其一
測試方式
- 語法:$USER1$/check_mysqlslave.sh -u $ARG1$ -p $ARG2$ -H $HOSTADDRESS$
- 範例:$ ./check_mysql_slavestatus.sh -H localhost -P 3306 -u root -p password
[Master 設定步驟]
- ssh master
- vim /etc/nagios3/conf.d/dbs.cfg
define service{ use generic-service ; Name of service template to use host_name example.com service_description MySQL Replication check check_command check_nrpe_1arg!check_mysql_slave_status }
- /etc/init.d/nagios3 restart
- 到此即設定完成
相關設定
若要加入 /etc/nagios3/commands.cfg 可以參考下述:(我沒有用到此設定,給有需要的參考用)
- 一般 check replication 是否有問題
define command { command_name check_mysql_slavestatus # command_line $USER1$/check_mysql_slavestatus.sh -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p $ARG3$ command_line /usr/lib/nagios/plugins/check_mysql_slavestatus.sh -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p $ARG3$ }
- 'check_mysql_slavestatus' command definition with delay check
define command { command_name check_mysql_slavestatus # command_line $USER1$/check_mysql_slavestatus.sh -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p $ARG3$ -w $ARG4$ -c $ARG5$ command_line /usr/lib/nagios/plugins/check_mysql_slavestatus.sh -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p $ARG3$ -c $ARG5$ }