系统运维工程师 李超
前面已经介绍了分布式监控系统Zabbix-自动发现-添加mysql多实例监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳。要想更加仔细的监控Mysql,业内同学们都会选择采用Percona Monitoring Plugins监控MySQL。Percona有比较详细的监控Mysql的模版以及脚本,它提升了在高负载情况下的InnoDB的性能、为运维人员提供一些非常有用的性能诊断工具;另外它有更多的参数和命令来控制服务器行为。废话不多说,下面记录下使用Percona Monitoring Plugins监控MySQL的操作过程:
被监控主机的zabbix的部署路径是/data/zabbix。
数据库目录:
环境路径我们已经都有了接下来开始就部署我们的重头戏:
如下是在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
解压完成之后是这样子的:
进入两个目录分别查看里边有这些东东
$ 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_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 "[email protected]";
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上查看我们的监控,如图:
然后就完啦,对了还有一个问题就是
你们这是红色的,解决办法就是点进去
到此分享完毕。
系统运维工程师 李超
原文地址:http://blog.51cto.com/13120271/2147248