MySQL のレプリケーションを Nagios で監視する

MySQL のレプリケーションを Nagios で監視する

みなさんこんにちは、nakamura です。2011 年も後 1 ヶ月!悔いのないように過ごしましょうね!

MySQL のレプリケーションってけっこう繊細なやつで、割りとちょっとした事ですぐに止まっちゃうんですよね~。しかもレプリケーションが止まった所でサイトが停止するわけではないので、とっても気付きづらい・・・。というわけでレプリケーションする際には監視は欠かせない!と思っているわたくしが、今回は SNMP + Nagios で監視する方法をご紹介しようと思います。

コマンドの実行結果を MIB ツリーに追加

まずは監視対象となるレプリケーションのスレーブサーバに以下のようなスクリプトを用意します。パスやファイル名はお好みで変えてください。MySQL の root パスワードが書かれているのでパーミッションは 700 がいいかもですね。

/var/admin/scripts/snmp/replication_slave_sql.sh

#!/bin/bash
# Watch Slave_SQL_Running parameter for SNMP.

mysql -uroot -ppassword -e "SHOW SLAVE STATUS\G" | grep "Slave_SQL_Running"

/var/admin/scripts/snmp/replication_slave_io.sh

#!/bin/bash
# Watch Slave_IO_Running parameter for SNMP.

mysql -uroot -ppassword -e "SHOW SLAVE STATUS\G" | grep "Slave_IO_Running"

それぞれ試しに実行してみて問題ないようであれば SNMP の設定ファイルに以下を追記します。設定ファイルのパスはディストリビューションで違うかもしれないので、なければ色々探してみてください。

/etc/snmp/snmpd.conf

exec slave_io /var/admin/scripts/snmp/replication_slave_io.sh
exec slave_sql /var/admin/scripts/snmp/replication_slave_sql.sh

記述を追加したら SNMP を再起動します。

/etc/init.d/snmpd restart

MIB ツリーに追加されているか確認します。

snmpwalk -v 2c localhost -c community_name 1.3.6.1.4.1.2021.8

こんなのが出てれば正解!

UCD-SNMP-MIB::extOutput.3 = STRING:   Slave_IO_Running: Yes
UCD-SNMP-MIB::extOutput.4 = STRING:   Slave_SQL_Running: Yes

Nagios に監視設定を追加

まずはコマンドを定義します。こんな感じで。設定ファイルのパスは CentOS のものです。

/etc/nagios/objects/commands.cfg

# 'check_slave_io' command definition
define command {
    command_name    check_slave_io
    command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -o .1.3.6.1.4.1.2021.8.1.101.3 -r Yes -P 2c -C community_name
}

# 'check_slave_sql' command definition
define command {
    command_name    check_slave_sql
    command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -o .1.3.6.1.4.1.2021.8.1.101.4 -r Yes -P 2c -C community_name

-r で期待される文字列を指定します。.1.3.6. ・・・という OID の部分は snmpwalk コマンドに -O n というオプションをつける事で取得可能です。こんな感じ。

snmpwalk -v 2c localhost -c community_name 1.3.6.1.4.1.2021.8 -O n

コマンドを定義したらサービスに追加してみましょう。

/etc/nagios/objects/services.cfg

# MySQL Replication Slave IO
define service {
    use                     generic-service
    host_name               slave_db
    service_description     Slave IO Running
    check_command           check_slave_io
}

# MySQL Replication Slave SQL
define service {
    use                     generic-service
    host_name               slave_db
    service_description     Slave SQL Running
    check_command           check_slave_sql
}

シンタックスチェックして Nagios 再読み込み。

nagios -v /etc/nagios/nagios.cfg
/etc/init.d/nagios reload

こんな感じでサービスが追加されていれば OK!

20111201_nakamura_01.png

レプリケーションは止まってから気付くまでが早ければ早いほど復旧も楽なので、ぜひ監視は自動化しておきたいところですね。

終わりに

SNMP の exec を使って任意のコマンドの実行結果を監視するやり方はレプリケーションに限らず、何にでも応用可能な方法なので、大概のものは監視できちゃいますよ。一度お試しあれ。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ