@[toc]
插件下载地址:https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
接下来安装percona zabbix插件,这个插件是用来监控MySQL的。由于我的MySQL安装在了Zabbix Server(10.0.0.2),所以这里就把插件安装在Zabbix Server上。需要注意的是插件是与Zabbix Agent结合使用的,所以这台Zabbix Server也要安装Zabbix Agent,当然在这之前我们已经在Zabbix Server上安装过Zabbix Agent。
# 下载插件rpm包
[root@Zabbix-server ~]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
# 安装插件
[root@Zabbix-server ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
警告:percona-zabbix-templates-1.1.8-1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:percona-zabbix-templates-1.1.8-1 ################################# [100%]
Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates
# 跳转到模板目录下,需要将配置项文件复制到/etc/zabbix/zabbix_agentd.d/目录下
[root@agent zabbix_agentd.d]# cd /var/lib/zabbix/percona/templates/
[root@agent templates]# ls
userparameter_percona_mysql.conf zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
[root@agent templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
将/var/lib/zabbix/percona/templates/下的模板文件zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml拷贝出来,通过导入的方式添加这个模板。但是由于/var/lib/zabbix/percona/templates/下的模板版本比较低,所以不能成功导入。所以这里需要下载新的模板,模板下载地址:zbx_percona_mysql_template.xml。
处理方式1:安装一个低版本的Zabbix 2.2,然后再导入这个模板
处理方式2:升级Zabbix 2.2到4.0,然后导出模板
模板导入之后,要重启Zabbix Agent使模板生效。然后开始测试取MySQL监控的项的值。
# 模板导入之后,要重启Zabbix Agent使模板生效
[root@Zabbix-server ~]# systemctl restart zabbix-agent
# 查看监控项
[root@Zabbix-server zabbix_agentd.d]# cat userparameter_percona_mysql.conf
UserParameter=MySQL.Sort-scan,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt
UserParameter=MySQL.slave-stopped,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh
UserParameter=MySQL.Com-replace,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz
...
UserParameter=MySQL.running-slave,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
[root@Zabbix-server zabbix_agentd.d]# sh -x /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh op
...
# 使用调试模式执行取值的命令
[root@Zabbix-server zabbix_agentd.d]# sh -x /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ij
+ ITEM=
+ HOST=localhost
++ dirname /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
+ DIR=/var/lib/zabbix/percona/scripts
+ CMD='/usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg'
+ CACHEFILE=/tmp/localhost-mysql_cacti_stats.txt
...
# 执行这个php脚本取值
[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
gg:0[root@Zabbix-server zabbix_agentd.d]#
# 如果报MySQL拒绝用户的错误,就需要修改连接MySQL的用户名密码等(如果是二进制安装的,一定要协商MySQL的socket路径)
[root@Zabbix-server zabbix_agentd.d]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = '';
$mysql_port = 3306;
$mysql_socket = NULL;
# 这时候就可以取值了
[root@Zabbix-server zabbix_agentd.d]# sh /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ih
319916
[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items oj
oj:6[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items ih
ih:310965[root@Zabbix-server zabbix_agentd.d]#
监控数据库不是每个监控项都要取一次值,而是监控一次生成缓存(文件),5分钟之后把这个缓存文件删除
再监控下一次。每一次 监控的间隔默认是300s
,可以通过修改 /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh 脚本来修改这个值。
# 修改脚本,将取值的默认间隔设置为30s
[root@Zabbix-server zabbix_agentd.d]# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
# 缓存文件
[root@Zabbix-server zabbix_agentd.d]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1393 6月 1 11:48 /tmp/localhost-mysql_cacti_stats.txt
# 上面手动执行脚本取值生成的缓存文件的用户和用户组都是root,很容易出问题,提示权限拒绝,所以要删除。
[root@Zabbix-server zabbix_agentd.d]# rm -r /tmp/localhost-mysql_cacti_stats.txt
# 使用zabbix_get来取值,这里要把key复制粘贴下来,不要使用gg什么的
[root@Zabbix-server zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -k MySQL.Open-files
5
# 这时候临时的缓存文件属于zabbix用户和zabbix用户组
[root@Zabbix-server zabbix_agentd.d]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-rw-r-- 1 zabbix zabbix 1398 6月 1 11:56 /tmp/localhost-mysql_cacti_stats.txt
zabbix在执行脚本的时候使用的用户是zabbix
设置每页显示200行,默认是50行: 设置间隔,与服务器中的设置一致是30s: 查看最新数据:
对于主库是没有MySQL同步进程的,所以主从状态监控项是取不到的,所以 需要禁用这个监控项
。如果是从库,报帐号密码错误,可能是脚本的原因,get_mysql_stats_wrapper.sh:
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"
if [ "$ITEM" = "running-slave" ]; then
# Check for running slave
RES=`HOME=~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 30 ]; 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
那就可以试试不要使用zabbix用户取值,使用其它用户,如root用户。所以,需要修改:
RES=`HOME=~zabbix mysql -uroot -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
# 这里在没有修改的情况下也是可以取到值的,不过这里是主库,取到的值是0
[root@Zabbix-server zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -k MySQL.running-slave
0