一、Zabbix 中监控 MySQL 方式
1. 使用自带模板监控 MySQL
Zabbix-Agent 本身并没有提供直接对 MySQL 监控的 Key,所以首先需要通过自定义 Key 来应用自带的 MySQL 模板。
具体步骤暂不说明。
2. 使用 Percona Monitoring Plugins 监控 MySQL
业界的同学一般都是此方式监控MySQL。本文主要说明使用 Percona Monitoring Plugins 监控 MySQL 的方式。
二、使用 Percona Monitoring Plugins 监控 MySQL
1. 系统需求
被监控服务器上安装 zabbix-agent, php, php-mysql
[root@linux-node1 ~]# yum install zabbix-agent php php-mysql
[root@linux-node1 ~]# rpm -qa zabbix-agent php php-mysql
php-mysql-5.4.16-36.1.el7_2.1.x86_64
php-5.4.16-36.1.el7_2.1.x86_64
zabbix-agent-3.0.3-1.el7.x86_64
2. 安装配置 percona-zabbix-templates
# 安装 percona-zabbix-templates
yum install https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm
# 也可配置 Percona 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
# 配置 Zabbix Agent
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# 启动zabbix-agent
systemctl restart zabbix-agent
2.1. 重要配置文件
[root@linux-node1 ~]# ll /var/lib/zabbix/percona/
total 8
drwxr-xr-x. 2 root root 4096 Aug 22 22:56 scripts
drwxr-xr-x. 2 root root 4096 Aug 21 21:43 templates
[root@linux-node1 ~]# ll /var/lib/zabbix/percona/scripts/
total 64
-rwxr-xr-x. 1 root root 1273 Aug 22 22:56 get_mysql_stats_wrapper.sh
-rwxr-xr-x. 1 root root 59637 Aug 21 21:49 ss_get_mysql_stats.php
[root@linux-node1 ~]# ll /var/lib/zabbix/percona/templates/
total 284
-rw-r--r--. 1 root root 18866 Jan 11 2016 userparameter_percona_mysql.conf
-rw-r--r--. 1 root root 269258 Jan 11 2016 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml
[root@linux-node1 ~]#
/var/lib/zabbix/percona/scripts/这里面的两个文件,sh的脚本是监控获取MySQL状态的,php文件是配置连接数据库用户名密码的。用shell来调用PHP。
/var/lib/zabbix/percona/templates/这里面的两个文件,conf文件是要放在agent端/etc/zabbix/zabbix_agentd.d/下面的,XML文件是模版文件。
3. 配置 Agent 上的 MySQL 连接
# 创建 .cnf 文件指定 MySQL 用户名和密码
# 生产环境请一定要设置复杂密码
[root@linux-node1 ~]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'zabbix';
$mysql_pass = 'zabbix';
# 测试脚本
[root@linux-node1 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
# 配置 ~zabbix/.my.cnf,内容如下:
[root@linux-node1 ~]# cat ~zabbix/.my.cnf
[client]
user = zabbix
password = zabbix
# zabbix 用户测试脚本
[root@linux-node1 ~]# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
0
4.配置zabbix server
1、去 https://www.percona.com/downloads/percona-monitoring-plugins/ 下载 Percona Monitoring Plugins 最新 tar.gz 源码包(如果使用 Zabbix 3.0,自带模板有点旧了,并不能导入使用,后面给出解决办法)
2、解压获取 zabbix/templates/ 目录
3、通过 Zabbix Web 界面 (Configuration -> Templates -> Import) 导入 XML 模板,注意要另外选择上 Screens.
4、配置主机关联上 Percona MySQL Server Template 模板
5:配置salve的监控
1、先在mysql slave的agent里面需要check下看是否生效:
[root@linux-node1 ~]# sh /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
ERROR 1045(28000):Access denied for user 'root'@'localhost'(using password: NO)
0
2、配置访问mysql的基本参数:
#在my.cnf配置用户名密码、sock路径
[root@linux-node1 ~]# vim /usr/local/mysql/etc/my.cnf
[mysql]
user=zabbixmoniter
password=123456
socket=/usr/local/mysql/mysql.sock
3、再次check
4、最好在zabbix管理界面,进入Hosts的mysql从库里面,进入triggers选项栏下面会看到从percona模版加载进来的slave监控项“Slave isstopped on {HOST.NAME}”,过几分钟,就会看到slave监控生效了
三、遇到的问题
1.导入模板报错
如果使用 Zabbix 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.
解决方法: 手动修改模板文件解决报错比较麻烦,有人提到可以将此模板导入 Zabbix 2.X 系列后,再导出到 Zabbix 3.0。
这里我们直接使用现成可用的 Zabbix 3.X 的 percona-zabbix-templates
zbx_percona_mysql_template.xml 模板地址
2.不出图
# zabbix_get 能获取数据,但是不出图。
[root@linux-node1 ~]# zabbix_get -s 192.168.56.11 -k "MySQL.max-connections"
151
# 查看状态文件权限,为之前测试脚本时的 root 权限,zabbix 用户并不能读写,所以获取不到数据
[root@linux-node1 ~]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1374 Jun 22 11:33 /tmp/localhost-mysql_cacti_stats.txt
# 删除 root 用户测试时生成的 mysql 状态文件
[root@linux-node1 ~]# rm -f /tmp/localhost-mysql_cacti_stats.txt
# 会自动生成 zabbix 用户权限的 mysql 状态文件
[root@linux-node1 ~]# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-rw-r-- 1 zabbix zabbix 1374 Jun 22 11:41 /tmp/localhost-mysql_cacti_stats.txt
# 过一会儿就可以看到出图了
3.执行脚本连接不上MySQL或者命令未找到
/var/lib/zabbix/percona/scripts/下面的get_mysql_stats_wrapper.sh中配置的变量HOST、CMD、RES等是否正确。主机名若使用localhost,是否已经在mysql中授权,最好是重新启用一个用户名来专门用作zabbix监控使用。
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbixmoniter'@'localhost' IDENTIFIED BY "123456";
Query OK,0 rows affected (0.06 sec)
我直接执行脚本
# 查看定义的key
[root@linux-node1 ~]# tail -3 /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf
UserParameter=MySQL.Open-files,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ij
UserParameter=MySQL.State-closing-tables,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lq
UserParameter=MySQL.running-slave,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
# 直接执行,获取不到key
[root@linux-node1 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lq
[root@linux-node1 ~]#
# 查看临时文件为空,证明脚本没有正确连接到MySQL。
[root@linux-node1 ~]# cat /tmp/localhost-mysql_cacti_stats.txt
[root@linux-node1 ~]#
# 直接执行get_mysql_stats_wrapper.sh脚本里的CMD内容,发现找不到/var/lib/mysql/mysql.sock
[root@linux-node1 ~]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
ERROR: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)[root@linux-node1 ~]#
# 因为mysql不是安装在默认位置下,所以添加一个软连接
[root@linux-node1 ~]# ln -s /opt/data/mysql/mysql.sock /var/lib/mysql/mysql.sock
注意:
安装php和php-mysql会安装关联的httpd,所以会新建apache用户,进而zabbix会告警提示“ /etc/passwd has been changed ”
参考:
Percona Monitoring Plugins for Zabbix
the tag “snmp_community” is missing.
ZABBIX AND PERCONA
https://www.cnblogs.com/caoxiaojian/p/5706992.html
https://jaminzhang.github.io/monitoring/Monitoring-MySQL-using-Percona-Monitoring-Plugins-in-Zabbix/