zabbix监控mysql
下面介绍两种监控MySQL服务的方法~
一、自定义监控参数
通过自定义参数简单监控服务的状态~~
- 第一步:修改默认配置文件
zabbix-agent安装之后,在配置文件目录/etc/zabbix/zabbix_agentd.d下会自带一个MySQL的监控参数文件:
[root@zabbix-agent zabbix_agentd.d]# grep ^[a-Z] /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N' UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V
不过这个文件不能直接使用,因为没有设置数据库连接的用户名和密码,执行不会成功!修改上面标红的一行到如下结果(添加用户名和密码):
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin -u root -p 123456 ping | grep -c alive
- 第二步:重启zabbix-agent
systemctl restart zabbix-agent.service
- 第三步:通过zabbix_get取值
在zabbix-server端运行zabbix_get命令,获取数据库运行情况:
[root@zabbix-server ~]# zabbix_get -s 10.0.0.12 -p 10050 -k mysql.ping 1
这里返回1表示数据库正在运行。。。
- 第四步:页面配置监控项
- 第五步:查看最新数据
检查能否查看到最新数据,如果能获取到值说明已经可以监控服务了,并且可以通过这个监控项来创建触发器
二、使用percona监控插件
- 第一步:安装php环境
因为percona插件是通过php写的,因此首先需要安装php环境
yum -y install php php-mysql
- 第二步:在zabbix-agent下载并安装percona插件
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
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
#查看安装的文件
[root@zabbix-agent src]# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona #<==插件安装目录
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php #<==主php程序
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf #<==UserParameter配置文件,需要复制到/etc/zabbix/zabbix-agent.d/目录下
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml #<==监控模板
- 第三步:移动配置文件userparameter_percona_mysql.conf
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
- 第四步:配置密码文件
默认执行脚本/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php在调用时,需要在当前目录下找一个.cnf结尾的文件,具体内容如下:
[root@zabbix-agent scripts]# grep .cnf /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php # .cnf extension. if ( file_exists('/etc/cacti/' . basename(__FILE__) . '.cnf' ) ) { require('/etc/cacti/' . basename(__FILE__) . '.cnf'); debug('Found configuration file /etc/cacti/' . basename(__FILE__) . '.cnf'); elseif ( file_exists(__FILE__ . '.cnf' ) ) { require(__FILE__ . '.cnf'); debug('Found configuration file ' . __FILE__ . '.cnf');
由于这个文件默认不存在,因此我们需要创建这个文件,并在里面写入mysql连接的用户名和密码:
[root@zabbix-agent scripts]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf <?php $mysql_user='root'; $mysql_pass='123456';
#这里我的mysql用户名为root和123456
- 第五步:先测试一下这个监控脚本(如果能获取值,说明配置成功了!!)
[root@zabbix-agent scripts]# head -5 ../../percona/templates/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.innodb-lock-structs,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lp UserParameter=MySQL.Com-load,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kg
#使用脚本获取参数(说实话这几个参数是什么我也步太清楚,可以看上面的UserParameter来判断。。。)
[root@zabbix-agent scripts]# sh /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lp
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kg
0
[root@zabbix-agent scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
注意:如果socket文件不在默认路径下的话,配置文件get_mysql_stats_wrapper.sh第19行需要在这个参数里面增加socket文件的地址:RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUS\G' | egrep
- 第六步:修改权限
chown -R zabbix.zabbix /var/lib/zabbix/percona/
- 第七步:重启zabbix-agent
systemctl restart zabbix-agent
- 第八步:导入模板
将模板/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml导入zabbix-server
导入的时候会报一个错误,内容如下:
这是由于这个插件默认用的zabbix2.0模板,时间戳有问题
解决办法:将zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml导入zabbix2.4中再导出,之后将新的导出xml导入到3.0中问题解决。
这里有个已经修改好的模板:
链接:https://pan.baidu.com/s/1hwxxtqykTbXYMOylnNhO5w
提取码:xe46
模板导入成功:
- 第九步:主机添加percona模板
- 第十步:查看最新数据和实时图形
因为模板的监测间隔为5分钟,需要等待一段时间
- 第二个报错问题 :
我在第一次测试的时候,发现一直获取不到数据,因此通过zabbix_get其中一个监控项的值,结果发现有如下报错:没权限???
而且zabbix-server也在抛出异常(应该早一些看日志的):
cannot convert value to numeric type
- 解决办法:
在zabbix-agent上将这个文件赋予zabbix的权限即可:
[root@zabbix-agent zabbix_agentd.d]# chown -R zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
要有正确数据才行:
最后,可以根据自己业务的实际需求,将不需要的监控项都清楚掉,不断优化监控模板!!