Zabbix实现监控多个mysql过程解析
一台服务器上开启了3个mysql实例进程,占用不同的端口3306、3307、3308
原理说明:
通过自动发现规则来获取MySQL实例的端口,自动发现规则上的{$MYSQLPORT}是要传递给agent自动发现脚本的参数,这个值是从主机定义的宏{$MYSQLPORT}获取过来的,自动发现的脚本将其解析成{#MYSQLPORT}:端口的形式,监控项原型再根据{#MYSQLPORT}的值来生成监控项,大致流程如下:
主机定义宏{$MYSQLPORT}->自动发现规则键值{$MYSQLPORT}->调用agent上自动发现脚本并解析成{#MYSQLPORT}:端口->监控项原型{#MYSQLPORT}->自动生成主机监控项
一、在mysql多实例服务器上的操作
1、授权zabbix监控mysql账号,在每个实例下都需要。
此处账号为zabbixagent,密码为:Zabbix131
GRANTUSAGE,PROCESS,REPLICATIONCLIENT,REPLICATIONSLAVEON*.*TO'zabbixagent'@'localhost'IDENTIFIEDBY'Zabbix131';
flushprivileges;
2、修改zabbix_agentd.conf配置文件
最后位置增加
UnsafeUserParameters=1 EnableRemoteCommands=1 Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf [root@mysqlzabbix]#vi/etc/zabbix/etc/zabbix_agentd.conf UnsafeUserParameters=1 EnableRemoteCommands=1 Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf
3、增加配置文件
[root@mysqletc]#vim/etc/zabbix/etc/zabbix_agentd.conf.d/check_mysql.conf UserParameter=mysql_discovery[*],/etc/zabbix/bin/discovery_mysql.sh$1###自动发现不同端口 UserParameter=mysql.status[*],/etc/zabbix/bin/mysql_status.sh$1$2###性能监控信息 UserParameter=mysql.ping[*],/etc/zabbix/bin/mysql_alive.sh$1###是否存活 UserParameter=mysql.ms.check[*],/etc/zabbix/bin/mysql_slave_status.sh$1###从库状态是否正常 UserParameter=mysql.ms.time[*],/etc/zabbix/bin/mysql_slave_time.sh$1###从库是否有延迟
4、增加执行脚本文件
[root@mysqletc]#ll/etc/zabbix/bin/ total716 -rwxr-xr-x1rootroot441Jul2211:36discovery_mysql.sh -rwxr-xr-x1rootroot401Jul2211:36mysql_alive.sh -rwxr-xr-x1rootroot303Jul2215:10mysql_slave_status.sh -rwxr-xr-x1rootroot286Jul2215:10mysql_slave_time.sh -rwxr-xr-x1rootroot299Jul2211:36mysql_status.sh -rwxr-xr-x1rootroot370Jul2211:36mysql_version.sh [root@mysqletc]#more/etc/zabbix/bin/discovery_mysql.sh res=`echo$1|sed"s/_/\n/g"`; port=($res) printf'{\n' printf'\t"data":[\n' forkeyin${!port[@]} do if[["${#port[@]}"-gt1&&"${key}"-ne"$((${#port[@]}-1))"]]; then printf'\t{\n' printf"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n" else[["${key}"-eq"((${#port[@]}-1))"]] printf'\t{\n' printf"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n" fi done printf'\t]\n' printf'}\n' [root@mysqletc]#more/etc/zabbix/bin/mysql_status.sh #!/bin/bash var=$1 mysql=/usr/local/mysql/bin/mysql MYSQL_USER="zabbixagent" MYSQL_PASSWORD=Zabbix131 MYSQL_SOCK_DIR="/tmp/mysql$2.sock" ${mysql}-u${MYSQL_USER}-p${MYSQL_PASSWORD}-S${MYSQL_SOCK_DIR}-e"showglobalstatus;"2>/dev/null|grep-vVariable_name|grep"\b${var}\b"|awk'{print$2}' [root@mysqletc]#more/etc/zabbix/bin/mysql_alive.sh #!/bin/bash mysqladmin=/usr/local/mysql/bin/mysqladmin MYSQL_USERdd="zabbixagent" MYSQL_PASSWORD=Zabbix131 MYSQL_SOCK_DIR="/tmp/mysql$1.sock" ${mysqladmin}-u${MYSQL_USER}-p${MYSQL_PASSWORD}-S${MYSQL_SOCK_DIR}ping|grep-calive [root@mysqletc]#more/etc/zabbix/bin/mysql_slave_status.sh #!/bin/bash #var=$1 mysql=/usr/local/mysql/bin/mysql MYSQL_USERdd="zabbixagent" MYSQL_PASSWORD=Zabbix131 MYSQL_SOCK_DIR="/tmp/mysql$1.sock" ${mysql}-u${MYSQL_USER}-p${MYSQL_PASSWORD}-S${MYSQL_SOCK_DIR}-e"showslavestatus\G;"2>/dev/null|grep-E'Slave_IO_Running:Yes|Slave_SQL_Running:Yes'|grep-cYes [root@mysqletc]#more/etc/zabbix/bin/mysql_slave_time.sh #!/bin/bash #var=$1 mysql=/usr/local/mysql/bin/mysql MYSQL_USERdd="zabbixagent" MYSQL_PASSWORD=Zabbix131 MYSQL_SOCK_DIR="/tmp/mysql$1.sock" ${mysql}-u${MYSQL_USER}-p${MYSQL_PASSWORD}-S${MYSQL_SOCK_DIR}-e"showslavestatus\G;"2>/dev/null|grep-E'Seconds_Behind_Master'|awk'{print$2}'
5、重启zabbix_agentd
[root@mysqlzabbix_agentd.d]#systemctlrestartzabbix-agent
二、zabbix页面上操作
1、导入template_multi_MySQL.xml模板信息,也可以参考xml文件手动增加。
2、在模版上创建自动发现的规则,在自动发现规则中需要定义两个东西:
a.键值用来自动获取MySQL实例的端口,需要使用到主机宏{$MYSQLPORT}
b.监控项原型根据获取的端口来生成对应的监控项,需要使用到自动发现宏{#MYSQLPORT}
3、在需要监控的主机上增加新创建的模板
4、在需要监控的主机上定义一个宏{$MYSQLPORT},对应要监控的端口,如3306_3307_3308
三、等待收集数据完成,如果没有数据的话,手动测试下具体
例如在zabbixserver上执行操作,例如测试mysql3306是否存活,1表示up,0表示down。
最终的效果是
Zabbix131
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。