本文以已经部署好zabbix-server和zabbix-agent,并正常使用的前提下,介绍如何配置zabbix监控mysql主从复制状态
1. 创建监控脚本
首先咱们需要在zabbix-agent服务器上创建一个可以获取mysql主从复制状态的脚本
#!/bin/bash
#author: ning
HOSTIP=$1
PASSWORD=${2:-"xxxZ8vxxxxYv4Hom"}
conid=`sudo docker ps |grep mysql-master |awk '{print $1}'`
#检测数据库是否连接成功
check_mysql() {
sudo docker exec -i ${conid} mysql -uroot -h$1 -p${PASSWORD} -e 'show databases;' > /dev/null 2>&1
if [ $? != 0 ] ;then
echo 2
exit
fi
}
#创建获取mysql主从同步的函数
slave_status() {
slave_code=`sudo docker exec -i ${conid} mysql -uroot -h$1 -p${PASSWORD} -e 'show slave status\G;' 2> /dev/null |grep -w 'Slave_IO_Running\|Slave_SQL_Running' |grep -o 'No'`
if [[ ${slave_code} == 'No' ]] ; then
echo 0
else
echo 1
fi
}
#
check_mysql $1 $2
slave_status $1 $2
因为我是监控以容器方式运行的mysql,与直接本地运行的mysql有些差别,可根据需求稍微改动下脚本
创建好脚本后添加执行权限,手动执行下看下效果
./mysql.sh 10.10.0.10 xxxxxxxx
#输出结果为
1
输出结果介绍:
- 0 表示当前主从同步失败
- 1 表示当前主从同步正常
- 2 表示登录mysql遇到错误,需要检测IP和密码是否错误
2. 修改zabbix-agent配置
编辑你的zabbix-agent的配置文件
vim /etc/zabbix/zabbix-agent.conf
#添加以下几行
#是否允许远程使用root用户远程执行脚本,1表示允许
EnableRemoteCommands=1
#开启自定义脚本权限
UnsafeUserParameters=1
#自定义监控项
#这个docker.py脚本需要拥有执行权限,存放位置自定义
UserParameter=mysql.[*],/etc/zabbix/mysql.sh $1 $2
#添加好以后需要重启agent才能生效
systemctl restart zabbix-agent
说明:
- mysql.[*] 这个是key,可以自定义,server端的模板会用到,[*] 接收模板传过来的参数
- $1对应[∗]server端传过来的参数第一个参数,$2对应[∗]server端传过来的参数第二个参数,例如server端传的是 10.10.10.10,对应为mysql.sh 10.10.10.10 (类似shell中的位置变量)
3. 在server端进行测试
配置好以后就可以在zabbix-server端进行测试了
/uar/local/zabbix/bin/zabbix_get -s 10.10.0.10 -k 'mysql.[10.10.0.10]'
# 输出结果为
1
#如果输出结果和在agent端执行结果一致说明此脚本是可用的
#说明:
# -s agent端地址
# -k 自定义的监控项
如果执行结过提示没有权限,你可能还需要在agent端进行sudo授权,可参考
4. 创建监控项
进入到zabbix UI界面,配置>主机>选中要创建监控项的主机>监控项>创建监控项
配置好以后点击添加即可
等待一会就可以在最新数据里看到获取到的数据
如有疑问欢迎留言私信