munin mysql slave監視
muninに mysqlの slave監視で納得のいくものがなかったので作った。
http://rtilabs.net/files/2011_06_16/mysql_slave_delay
show slave status \G で マスターとスレーブが何秒遅れているかを示す Seconds_Behind_Master の値を表示する。
ただし、 Slave_IO_Running と Slave_SQL_Running が 共に Yes でなければ、スレーブが停止したと判断し、負の数字を返す。これはアラートしてキャッチできる。
#!/bin/sh # # Plugin to monitor the mysql slave delay. # # Parameters: # # config # autoconf # # Configuration variables # # mysqlopts - Options to pass to mysql # # # #%# family=auto #%# capabilities=autoconf MYSQLOPTS="$mysqlopts" MYSQL=/usr/bin/mysql if [ "x$MYSQLOPTS" = "x" ]; then MYSQLOPTS="-u root" fi if [ "$1" = "autoconf" ]; then $MYSQL --version 2>/dev/null >/dev/null if [ $? -eq 0 ] then $MYSQL $MYSQLOPTS status 2>/dev/null >/dev/null if [ $? -eq 0 ] then else echo "no (could not connect to mysql)" fi else echo "no (mysql not found)" fi exit 1 fi if [ "$1" = "config" ]; then echo 'graph_title MySQL slave delay' echo 'graph_vlabel second' echo 'graph_category mysql' echo 'graph_args --base 1000' echo 'delay.label delay' echo 'delay.info Seconds_Behind_Master' echo 'delay.draw LINE2' echo 'delay.min -10' echo 'delay.max 10' echo 'delay.critical 0:5' exit 0 fi SLAVESTATUS=`$MYSQL $MYSQLOPTS -e "show slave status \G"` echo "$SLAVESTATUS" | grep Slave_IO_Running | grep Yes > /dev/null IS_SLAVE_IO_RUNNIG=$? echo "$SLAVESTATUS" | grep Slave_SQL_Running | grep Yes > /dev/null IS_SLAVE_SQL_RUNNIG=$? DELAY=`echo "$SLAVESTATUS" | grep Seconds_Behind_Master | cut -d ':' -f 2 | sed -e 's# ##g'` ERROR=`echo "$SLAVESTATUS" | grep Last_Error | sed -e 's# ##g'` if [ $IS_SLAVE_IO_RUNNIG -ne 0 ]; then if [ $IS_SLAVE_SQL_RUNNIG -ne 0 ]; then echo "delay.value -10" echo "delay.extinfo $ERROR (Slave_IO_Running:No,Slave_SQL_Running:No)" exit 0 fi echo "delay.value -10" echo "delay.extinfo $ERROR (Slave_IO_Running:No,Slave_SQL_Running:Yes)" exit 0 fi if [ $IS_SLAVE_SQL_RUNNIG -ne 0 ]; then echo "delay.value -10" echo "delay.extinfo $ERROR (Slave_IO_Running:Yes,Slave_SQL_Running:No)" exit 0 fi echo "delay.value $DELAY" exit 0