系统运维工程师 李超
前面已经介绍了分布式监控系统Zabbix-自动发现-添加mysql多实例监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳。要想更加仔细的监控Mysql,业内同学们都会选择采用Percona Monitoring Plugins监控MySQL。Percona有比较详细的监控Mysql的模版以及脚本,它提升了在高负载情况下的InnoDB的性能、为运维人员提供一些非常有用的性能诊断工具;另外它有更多的参数和命令来控制服务器行为。废话不多说,下面记录下使用Percona Monitoring Plugins监控MySQL的操作过程:
被监控主机的zabbix的部署路径是/data/zabbix。

分布式监控系统Zabbix使用percona监控MySQL
分布式监控系统Zabbix使用percona监控MySQL_第1张图片

数据库目录:
分布式监控系统Zabbix使用percona监控MySQL_第2张图片
环境路径我们已经都有了接下来开始就部署我们的重头戏:

如下是在zabbix被监控机上的操作:
1)需要安装php脚本运行环境
percona监控zabbix的脚本是使用PHP写的,所以需要准备好php运行环境,这里直接选择用yum安装就可以满足要求了:
centos系统安装:
#yum install -y php php-mysql
Ubuntu系统安装:
#sudo apt-get install php-* php-mysql

确保被监控主机没有安装percona相关软件,如果有就卸载掉!
#rpm -qa|grep percona
2)下载官方percona模版 (https://www.percona.com/downloads/percona-monitoring-plugins/)
直接下载:https://pan.baidu.com/s/1c1IE7zq 提取密码:trp5
(包下载不下来的留言我给你包)
#wget https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm
centos:
#rpm -ivh percona-zabbix-templates-1.1.6-1.noarch.rpm
ubuntu:
sudo apt-get install alien
sudo alien percona-zabbix-templates-1.1.6-1.noarch.rpm
sudo dpkg -i percona-zabbix-templates-1.1.6-2.deb
解压完成之后是这样子的:
分布式监控系统Zabbix使用percona监控MySQL_第3张图片
进入两个目录分别查看里边有这些东东
$ ll
total 136
drwxr-xr-x 2 root root 4096 Jul 19 14:50 ./
drwxr-xr-x 4 root root 4096 Jul 18 16:51 ../
-rwxr-xr-x 1 keytech keytech 1385 Jul 19 14:50 get_mysql_stats_wrapper.sh
-rwxr-xr-x 1 root root 1254 Jul 18 18:29 get_mysql_stats_wrapper.sh.bak

-rwxr-xr-x 1 keytech keytech 59637 Jul 19 14:25 ss_get_mysql_stats.php
-rwxr-xr-x 1 root root 59637 Jul 18 16:58 ss_get_mysql_stats.php.bak

$ cd ../
scripts/ templates/
$ cd ../templates/
$ ll
total 272
drwxr-xr-x 2 root root 4096 Jul 19 14:31 ./
drwxr-xr-x 4 root root 4096 Jul 18 16:51 ../
-rw-r--r-- 1 root root 269258 Jan 11 2016 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml
-rw-r--r-- 1 root root 18866 Jan 11 2016 userparameter_percona_mysql.conf

如上,安装percona后会在/var/lib/zabbix/percona生成2个目录,其中:
/var/lib/zabbix/percona/scripts是监控脚本目录
/var/lib/zabbix/percona/templates是监控mysql的xml模版目录
然后把/var/lib/zabbix/percona/templates/目录下的模版文件zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6_1.xml复制出来,在zabbix的管理界面import导入进去。
NO NO NO 这个模板是2.0版本的zabbix可直接用的,目前大部分都是3.0版本以上的我用的3.4.5版本的zabbix。这个模板在最后边我会加上也可以在这直接下载修改好的新模版文件下载地址是:https://pan.baidu.com/s/1i5j8IJ7 提取密码:ab8a)。

3)添加参数支持
在被监控机器上将userparameter_percona_mysql.conf拷贝到zabbix_agent的对应配置目录下
#rsync -avpgolr /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /data/zabbix/etc/zabbix_agentd.conf.d/
#sed -i 's#/var/lib/zabbix/percona/scripts/#/data/zabbix/monitor_scripts/#g' /data/zabbix/etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf
分布式监控系统Zabbix使用percona监控MySQL

注意修改客户端机器的zabbix_agentd.conf文件,增加Include 把userparameter_percona_mysql.conf 所在的目录增加进去:
#cat /data/zabbix/etc/zabbix_agentd.conf|grep Include
###Option: Include
Include=/data/zabbix/etc/zabbix_agentd.conf.d/
#Include=/usr/local/etc/zabbix_agentd.userparams.conf
#Include=/usr/local/etc/zabbix_agentd.conf.d/
#Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
4)修改监控脚本
修改/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh脚本
-----------------------------------注意----------------------------------
若mysql没有使用默端口3006,比如mysql使用的是3317。则还需要修改如下脚本文件,记住不要在这里被坑了!改端口号码文件:
1-> 这里要先建好这个文件,否则会报rm权限错误

#touch /tmp/localhost-mysql_cacti_stats.txt:3307
#chown -R zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt:3307
2-> 修改端口脚本(下边脚本已经改好,可直接使用)

#!/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.6
#This program is part of Percona Monitoring Plugins
#License: GPL License (see COPYING)
#Copyright: 2016 Percona
#Authors: Roman Vynar

ITEM=$1
HOST=localhost
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:3307"
USER='root'
PASS='keytech2017'
sock='/data/mysql/mysql_3307/tmp/mysql.sock'
if [ "$ITEM" = "running-slave" ]; then

Check for running slave

RES=`/data/mysql/mysql_3307/bin/mysql -u$USER -h$HOST -p$PASS -S$sock -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
    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:3307`
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

登陆mysql创建监控要用的账号(授予的权限,最后手动登录验证下)

mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON . TO 'zabbixmysql'@'localhost' IDENTIFIED BY "mysql@12345678";
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
5)测试下监控项
在客户端zabbix-agentd测试下:
#/usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
gg:6
在服务器zabbix-server测试下(192.168.1.10是被监控主机的ip地址):
#/data/zabbix/bin/zabbix_get -s 192.168.1.10 -p 10050 -k "MySQL.Threads-connected"
1
#/data/zabbix/bin/zabbix_get -s 192.168.1.10 -p 10050 -k "MySQL.Handler-commit"
3
然后去web上查看我们的监控,如图:
分布式监控系统Zabbix使用percona监控MySQL_第4张图片
然后就完啦,对了还有一个问题就是
分布式监控系统Zabbix使用percona监控MySQL
你们这是红色的,解决办法就是点进去
分布式监控系统Zabbix使用percona监控MySQL
分布式监控系统Zabbix使用percona监控MySQL_第5张图片
到此分享完毕。
系统运维工程师 李超