三线城市做网站需求,什么是商城网站建设,2022知名品牌营销案例100例,什么是搜索引擎营销之前介绍了使用zabbix监控固定3306端口的mysql#xff08;文章地址为http://dl528888.blog.51cto.com/2382721/1346590#xff09;#xff0c;有个不好的地方是只能监控固定的3306端口#xff0c;如果是非3306端口的话#xff0c;需要修改模板#xff0c;如果主机有多个m…之前介绍了使用zabbix监控固定3306端口的mysql文章地址为http://dl528888.blog.51cto.com/2382721/1346590有个不好的地方是只能监控固定的3306端口如果是非3306端口的话需要修改模板如果主机有多个mysql实例的话需要具有不同的mysql模板然后在管理监控很是麻烦为了解决这个问题我使用lldlow level discovery方式监控mysql只需要你在正则表达式里把需要监控的端口标上就可以监控mysql多实例。下面是监控效果图1、整体图可以看到我这里是监控了3306与3307这2个mysql的实例在图形上是根据端口来进行区分。下面我只列举3307端口的监控效果图2、Mysql Sort of 3307 Port3、Mysql Bytes_sent Bytes_received of 3307 Port4、Mysql Com of 3307 Port5、Mysql Connectionsof 3307 Port6、Mysql Create tmp of 3307 Port7、Mysql Innodb of 3307 Port8、Mysql Key of 3307 Port9、Mysql Qcache of 3307 Port10、Mysql Queries and Questions of 3307 Port11、Mysql Slow of 3307 Port12、Mysql Sort of 3307 Port13、Mysql Uptime of 3307 Port如何实现一、客户端1、监控内容的json化在客户端里需要把监控的内容json化展示然后服务端可以通过正则来过滤出结果下面在是我的json监控mysql的json展示脚本内容如下#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
mysql() {port($(sudo netstat -tpln | awk -F [ :] /[m]ysql/ /0.0.0.0/ {print $5}))printf {\nprintf \tdata:[\nfor key in ${!port[]}doif [[ ${#port[]} -gt 1 ${key} -ne $((${#port[]}-1)) ]];thensocketps aux|grep ${port[${key}]}|grep -v grep|awk -F {print $10}|cut -d -f 1printf \t {\nprintf \t\t\t\{#MYSQLPORT}\:\${port[${key}]}\},\nelse [[ ${key} -eq ((${#port[]}-1)) ]]socketps aux|grep ${port[${key}]}|grep -v grep|awk -F {print $10}|cut -d -f 1printf \t {\nprintf \t\t\t\{#MYSQLPORT}\:\${port[${key}]}\}\nfidoneprintf \t ]\nprintf }\n
}
$1把此文件存放到/usr/local/zabbix/bin里然后给与755权限并修改用户与组为zabbix同时允许zabbix用户无密码运行netstatecho zabbix ALL(root) NOPASSWD:/bin/netstat/etc/sudoers#Disable requirettysed -i s/^Defaults.*.requiretty/#Defaults requiretty/ /etc/sudoers不关闭的话会无法获取数据并且zabbix日志里报2、修改zabbix_agentd.conf文件在zabbix_agentd.conf最后添加以下内容UserParameterzabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/mysql_low_discovery.sh $1
UserParametermysql_stats[*],mysql -h localhost -P $1 -uzabbix -pzabbix -e show global status|grep \$2\|cut -f2测试如果你能通过/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql]命令获取数据就代表没问题[rootzabbix1 bin]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql]
{data:[{{#MYSQLPORT}:3306}]
}3、mysql授权GRANT PROCESS ON *.* TO zabbixlocalhost identified BY zabbix;
Flush privileges;4、重启zabbix服务ps -ef|grep zabbix|grep -v grep|awk {print $2}|xargs kill -9
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf二、服务端1、模板导入把Template Mysql Auto Discovery导入到zabbix里模板在附件具体操作不介绍。2、设置正则在“管理”》“一般”》“正则表达式”里选择“新的正则表达式”然后设置类似如下我这是运行3301到3309这9个mysql实例3、主机关联模板把需要监控mysql实例的主机管理模板即可监控默认是3600秒后自动更新如下图为什么设置3600秒原因是如果设置时间过短比如你设置60s一个是服务器的压力大一个是如果你检测的端口突然当掉了还没有来的急报警主机通过json来获取不到这个信息就认为没有这个端口模板里会自动关闭这个监控项的内容默认保留30天然后自动删除这样报警功能就基本没有了所以还是发现的间隔时间长一些比较好。