Nagios 加上 MySQL Slave Replication Status 檢查

MySQL Status (Monitor)是否異常可以靠自己寫程式檢查 + 解決,不過都已經架了一台 Nagios,就該把檢查的工作全部交給它,才不會東漏一隻、西漏一隻的。

註:此設定主要針對 MySQL 的 DB Slave

Nagios 加上 MySQL Slave Replication Status 檢查

這程式主要是檢查 MySQL Slave status,此 Nagios 的 Script 檢查的項目還不少,不過我只需要確認 Replication 是否正常就夠了,所以更多的檢查就不細看了。

於 Nagios 的 MySQL Slave Status Script

Nagios 設定使用 MySQL Slave Status Script 的步驟

Nagios 檢查方式有兩種:

  1. 遠端透過此 Shell script 去抓取 Slave Status 資料,然後來確認。
  2. 遠端呼叫 Slave,Slave 執行抓取 localhost Status 資料,傳送回去確認。
  3. 註:避免網路或其它問題就造成誤報,所以下述是讓每台機器自己跑 localhost 檢查(此採用第二種方式)。

[Slave 設定步驟]

  1. ssh slave

MySQL 權限需要給 SUPER 或 REPLICATION CLIENT

  1. $ mysql -u root -p
  2. mysql> GRANT REPLICATION CLIENT on *.* TO 'nagios'@'127.0.0.1' IDENTIFIED BY 'password'; # 或 GRANT SUPER on *.* TO 'nagios'@'%' IDENTIFIED BY 'password';
  3. mysql> flush privileges;

抓取 Nagios MySQL Slave Status Script

  1. cd /tmp
  2. wget http://www.claudiokuenzler.com/nagios-plugins/check_mysql_slavestatus.sh
    chmod +x ./check_mysql_slavestatus.sh
  3. ./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
  4. mv check_mysql_slavestatus.sh /usr/lib/nagios/plugins/check_mysql_slavestatus.sh

設定 Nagios

  1. 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 設定步驟]

  1. ssh master
  2. 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
    }
  3. /etc/init.d/nagios3 restart
  4. 到此即設定完成

相關設定

若要加入 /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$
    }

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料