zabbix监控MySQL多实例实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix监控MySQL多实例实践相关的知识,希望对你有一定的参考价值。
一、实践背景:一台机器上部署了多个mysql实例,每个实例使用不同的端口,需要通过zabbix将其都纳入监控中。
二、实践方法及原理说明:
1.在Zabbix上创建监控MySQL数据库使用的模版,导入案例模版:
链接: https://pan.baidu.com/s/1nXooNPMXrmaAQidRrxVOLg 提取码: ure1
2.在模版上创建自动发现的规则,在自动发现规则中需要定义两个东西:
a.键值 用来自动获取MySQL实例的端口,需要使用到主机宏$MYSQLPORT
b.监控项原型 根据获取的端口来生成对应的监控项,需要使用到自动发现宏#MYSQLPORT
3.在需要监控的主机上定义一个宏$MYSQLPORT,对应要监控的端口,如3306_3307
4.在Zabbix agent上创建自动发现端口的脚本、状态监控脚本。
原理说明:
通过自动发现规则来获取MySQL实例的端口,自动发现规则上的$MYSQLPORT是要传递给agent自动发现脚本的参数,这个值是从主机定义的宏$MYSQLPORT获取过来的,自动发现的脚本将其解析成#MYSQLPORT: 端口的形式,监控项原型再根据#MYSQLPORT的值来生成监控项,大致流程如下:
主机定义宏$MYSQLPORT->自动发现规则键值$MYSQLPORT->调用agent上自动发现脚本并解析成#MYSQLPORT : 端口 ->监控项原型#MYSQLPORT->自动生成主机监控项
三、环境说明:
OS:CentOS Linux release 7.6.1810 (Core)
Zabbix Server 版本:4.2.4
MySQL端口:3306,3307
3306 socket:/tmp/mysql3306.sock
3307 socket:/tmp/mysql3307.sock
脚本路径:/etc/zabbix/scripts/
四、在agent创建监控用的脚本
1.自动发现脚本:/etc/zabbix/scripts/discovery_mysqlport.sh
#!/bin/bash
res=`echo $1| sed "s//\n/g"`;
port=($res)
printf ‘\n‘
printf ‘\t"data":[\n‘
for key in $!port[@]
do
if [[ "$#port[@]" -gt 1 && "$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‘
执行效果
2.状态检查脚本:/etc/zabbix/scripts/mysql_status.sh
#!/bin/bash
var=$1
MYSQL_USER="zabbix"
MYSQL_PASSWORD=123456
MYSQL_SOCK_DIR="/tmp/mysql$2.sock"
$mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -S $MYSQL_SOCK_DIR -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "\b$var\b"|awk ‘print $2‘
3.在agent上添加监控项
UserParameter=mysql_discovery[],/etc/zabbix/scripts/discovery_mysql_port.sh $1
UserParameter=mysql.status[],/etc/zabbix/scripts/mysql_status.sh $1 $2
4.重启agent服务
systemctl restart zabbix-agent
自动生成的监控项效果图:
以上是关于zabbix监控MySQL多实例实践的主要内容,如果未能解决你的问题,请参考以下文章