下面介绍两种监控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
systemctl restart zabbix-agent.service
在zabbix-server端运行zabbix_get命令,获取数据库运行情况:
[root@zabbix-server ~]# zabbix_get -s 10.0.0.12 -p 10050 -k mysql.ping 1
这里返回1表示数据库正在运行。。。
检查能否查看到最新数据,如果能获取到值说明已经可以监控服务了,并且可以通过这个监控项来创建触发器
因为percona插件是通过php写的,因此首先需要安装php环境
yum -y install php php-mysql
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 #<==监控模板
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/
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
模板导入成功:
因为模板的监测间隔为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
要有正确数据才行:
最后,可以根据自己业务的实际需求,将不需要的监控项都清楚掉,不断优化监控模板!!
原文:https://www.cnblogs.com/liuguangjiji/p/10581281.html