之前介绍过如何通过固定端口监控mysql(地址http://dl528888.blog.51cto.com/2382721/1346590)和使用lld监控mysql性能(地址http://dl528888.blog.51cto.com/2382721/1357713),下面给大家介绍一下如何监控mysql的主从状态。下面是监控效果图:1.3306端口的MysqlSlaveStatus这个也是使用lowleveldiscovery进行监控,已经和之前监控mysql的lld模板合成了(所以本文只介绍mysql主从状态,其他Performance,这样使用模板不仅可以监控mysql的性能,还可以自动监控mysql的主从状态,如果io或者sql有任何状态不是yew,就会报警。如何实现:1.客户端1.监控内容JSON化在客户端,需要将监控内容以JSON格式展示,然后服务端可以通过正则对结果进行过滤。下面是我的json监控mysqljson显示脚本内容如下:#!/bin/bash#Fucation:mysqllow-leveldiscovery#Script_namemysql_low_discovery.shmysql(){port=($(sudonetstat-tpln|awk-F"[:]+"'/[m]ysql/&&/0.0.0.0/{print$5}'))printf'{\n'printf'\t"data":[\n'forkeyin${!port[@]}doif[["${#port[@]}"-gt1&&"${key}"-ne"$((${#port[@]}-1))"]];然后socket=`psaux|grep${port[${key}]}|grep-vgrep|awk-F'=''{print$10}'|cut-d''-f1`printf'\t{\n'printf"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"else[["${key}"-eq"((${#port[@]}-1))"]]socket=`psaux|grep${port[${key}]}|grep-vgrep|awk-F'=''{print$10}'|cut-d''-f1`printf'\t{\n'printf"\t\t\t\"{#MYSQLPORT}\":\"${端口[${key}]}\"}\n"fidoneprintf'\t]\n'printf'}\n'}$1这个文件存放在/usr/local/zabbix/bin,然后赋予755权限,修改用户和组为zabbix,并且允许zabbix用户在没有密码的情况下运行netstatecho"zabbixALL=(root)NOPASSWD:/bin/netstat">>/etc/sudoers#Disablerequirttysed-i's/^Defaults.*.requiretty/#Defaultsrequiretty/'如果/etc/sudoers没有关闭,数据不会并在zabbix日志中报2,修改zabbix_agentd.conf文件,在zabbix_agentd.conf末尾添加如下内容UserParameter=zabbix_low_discovery[*],/bin/bash/usr/local/zabbix/bin/mysql_low_discovery.sh$1用户参数=mysql_stats[*],mysql-hlocalhost-P$1-uzabbix-pzabbix-e"showglobalstatus"|grep"\<$2\>"|cut-f2用户参数=mysql_stats_slave[*],mysql-hlocalhost-P$1-uzabbix-pzabbix-e"showslavestatus\G"|grep"\<$2\>"|awk'{if($NF=="Yes"){print1}else{print0}}'3.测试是否可以通过/usr/local/zabbix/bin/zabbix_get-s127.0.0.1-kzabbix_low_discovery[mysql]和/usr/local/zabbix/bin/zabbix_get-s127.0.0.1-kmysql_stats_slave[3306,Slave_IO_Running],/usr/local/zabbix/bin/zabbix_get-s127.0.0.1-kmysql_stats_slave[3306,Slave_SQL_Running]命令获取数据没问题,t以下是我的测试结果4,mysql授权GRANTPROCESS,REPLICATIONCLIENTON*.*TO'zabbix'@'localhost'identifiedBY'zabbix';刷新权限;5.重启zabbix服务ps-ef|grepzabbix|grep-vgrep|awk'{print$2}'|xargskill-9/usr/local/zabbix/sbin/zabbix_agentd-c/usr/local/zabbix/conf/zabbix_agentd.conf2.Server1.Templateimport将TemplateMysqlAutoDiscovery导入zabbix(模板在附件中)。具体操作不做介绍。2、设置正则在“管理”=“通用”=“正则表达式”中,选择“新建正则表达式”,设置类似下面的内容。我正在运行从3301到3309的9个mysql实例。3.需要监控主机关联模板可以监控mysql实例的主机管理模板。默认是在3600秒后自动更新。为什么设置成下图中的3600秒呢?原因是设置的时间太短,比如你设置60s,一是服务器压力大,二是你检测到的端口突然down了,紧急告警了还没来,宿主无法通过json获取到这个信息,那么就认为没有这个端口,这个监控项的内容会在模板中自动关闭(默认保留30天,之后自动删除),所以告警功能基本会消失,所以发现间隔时间长一些比较好。博客地址:http://dl528888.blog.51cto.com/2382721/1434263
