使用 Percona Monitoring Plugins 监控 MySQL
由于zabbix自带的监控,监控内容相对较少,只有14项,但percona提供的工具有191项。
官方说明:https://www.percona.com/doc/percona-monitoring-plugins/1.1/zabbix/index.html#system-requirements
系统环境
可以安装在mysql服务器上,也可以安装在其他服务器上
需要安装zabbix-agent,php,php-mysql 安装php如下:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php56w php56w-bcmath php56w-cli php56w-common php56w-fpm php56w-gd php56w-mysql php56w-pdo php56w-mbstring php56w-mcrypt php56w-devel php56w-xml
客户端安装percona 监控插件
方法1:yum install https://www.percona.com/downloads/percona-monitoring-plugins/1.1.7/percona-zabbix-templates-1.1.7-1.noarch.rpm
方法2:配置yum仓库yum install https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
然后直接
yum install percona-zabbix-templates
配置客户端
安装完成之后在/var/lib/zabbix/percona下面生成了几个文件,如下:
[root@7-node1 percona]# pwd /var/lib/zabbix/percona [root@7-node1 percona]# tree . ├── scripts │ ├── get_mysql_stats_wrapper.sh │ ├── get_mysql_stats_wrapper.sh.bak │ ├── ss_get_mysql_stats.php │ └── ss_get_mysql_stats.php.cnf └── templates ├── userparameter_percona_mysql.conf └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml 2 directories, 6 files [root@7-node1 percona]#
- cp /var/lib/zabbix/percona/templates/userparameterperconamysql.conf /etc/zabbix/zabbix_agentd.d/ #相当于自定义的命令,复制到zabbix-agent对应的目录下面去。
- 创建一个.cnf文件指定MYsql用户名和密码,用于php脚本用
[root@7-node1 percona]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf <?php $mysql_user = 'zabbix'; $mysql_pass = 'zabbix'; [root@7-node1 percona]#
- 测试,如果结果有数字,就是正常的
[root@7-node1 percona]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg 22 [root@7-node1 percona]#
配置完成之后重启zabbix-agent
zabbix-server端配置,只需要导入xml的模板就可以了。
下载源码,1.7上目前没有,要下载1.6的,下载地址:https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-monitoring-plugins-1.1.6.tar.gz
解压之后,进入目录C:\Users\Administrator\Downloads\percona-monitoring-plugins-1.1.6\percona-monitoring-plugins-1.1.6\zabbix\templates下面有xml文件就是模板, 如果是3.0的版本,导入会报以下错:
Invalid tag “/zabbix_export/date”:“YYYY-MM-DDThh:mm:ssZ” is expected. Invalid tag “/zabbix_export/templates/template(1)/items/item(1)”: the tag “snmp_community” is missing.
可以去别的地方下载一个3.0的,下载地址:http://jaminzhang.github.io/soft-conf/Zabbix/zbxperconamysql_template.xml
如果打开是网页,没有下载,可以另存为就可以了,不要复制,这样没有用,要另存为。
无图,或者报无法删除/tmp/localhost***文件的解决方法
由于我们是在root下测试的,所以/tmp下的文件是root权限,zabbix用户就无法删除,所以要删除/tmp下的文件就可以了。 在zabbix-server上去zabbix-get报以下错,也是上面的原因,删除就可以了。
[root@7-node2 tools]# zabbix_get -s 192.168.7.220 -k "MySQL.max-connections" rm: cannot remove ‘/tmp/127.0.0.1-mysql_cacti_stats.txt’: Operation not permitted 151 [root@7-node2 tools]#
原理解析
监控原理是利用php脚本来获取值的,先通过shell脚本,然后shell脚本调用php文件,每次取值都是从/tmp/*.txt文件上取的,php程序执行一次,就会把所有的值生成放在/tmp/*.txt文件里,以下是shell脚本分析:
[root@7-node1 scripts]# cat get_mysql_stats_wrapper.sh #/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="127.0.0.1" #本来是localhost,但由于我的mysql是原码编译安装的,用localhost是用socket去连接mysql,但php脚本默认去/var/lib/mysql/socket下面找,但我的没有,所以我直接改成ip,这样是能过tcp去通信,所以不需要socket, DIR=`dirname $0` CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg" #这条命令就是调用php的, CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt" if [ "$ITEM" = "running-slave" ]; then # Check for running slave #测试slave的,下面的HOME我改成了/etc/zabbix,因为zabbix下面有一个.my.cnf文件,也是难念mysql登录信息的,等一下附在下面,用它的脚本我测试不通过,所以更改了一下。 RES=`HOME=/etc/zabbix mysql -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` TIMENOW=`date +%s` if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then#这里的默认获取时间是300秒,zabbix-server上的模板默认也是5份钟,如果你要更改成更新间隔时间为更少或更长,需要修改web面板和这里的,如果这里没有修改,其实还是5分钟取一次。所以这里要注意一下。 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 [root@7-node1 scripts]#
/etc/zabbix/.my.cnf文件内容如下,用于验证mysql登录的,不需要输入用户名和密码的:
[root@7-node1 scripts]# cat /etc/zabbix/.my.cnf [mysql] host=localhost user=zabbix password=zabbix socket=/application/mysql-5.7.16/tmp/mysql.sock [mysqladmin] host=localhost user=zabbix password=zabbix socket=/application/mysql-5.7.16/tmp/mysql.sock [root@7-node1 scripts]#
原文链接:使用 Percona Monitoring Plugins 监控 MySQL,转载请注明来源!