使用zabbix监控mysql多源复制中从库的状态;
环境描述:
MySQL5.7+
Zabbix版本3.0+
Percona模版:percona-zabbix-templates-1.1.7-2.noarch.rpm
更改脚本/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh,更改的内容如下:
第19行,将mysql 更改为/usr/local/mysql/bin/mysql
增加第20-30行代码
#!/bin/sh
# The wrapper for Cacti PHP script.
# It runs the script every 5 min. and parses the cache file on each following run.
# Version: 1.1.7
#
# This program is part of Percona Monitoring Plugins
# License: GPL License (see COPYING)
# Copyright: 2016 Percona
# Authors: Roman Vynar
ITEM=$1
HOST=192.168.0.243
DIR=`dirname $0`
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt:3306"
if [ "$ITEM" = "running-slave" ]; then
# Check for running slave
RES=`HOME=~zabbix /usr/local/mysql/bin/mysql --host='192.168.0.243' --user='zabbix_monitor' --password='@16nwLsgP' --port=3306 -e 'SHOW SLAVE STATUS\G' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
RES=`echo $RES |sed "s/,//g"`
status1=1
for status in $RES
do
if [ "$status" = "Yes" ];then
status1=`expr 1 \* $status1`
elif [ "$status" = "No" ];then
status1=`expr 0 \* $status1`
fi
done
echo $status1
# if [ "$RES" = " Yes, Yes," ]; then
# echo 1
# else
# echo 0
# fi
exit
elif [ -e $CACHEFILE ]; then
# Check and run the script
TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt:3306`
TIMENOW=`date +%s`
if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then
rm -f $CACHEFILE
$CMD 2>&1 > /dev/null
fi
else
$CMD 2>&1 > /dev/null
fi
# Parse cache file
if [ -e $CACHEFILE ]; then
cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
else
echo "ERROR: run the command manually to investigate the problem: $CMD"
fi
检查脚本:sh get_mysql_stats_wrapper.sh running-slave
在zabbix-server端检测:/usr/local/zabbix/bin/zabbix_get -s 192.168.0.243 -p 10050 -k "MySQL.running-slave"