zabbix监控mysql主从复制状态

本文以已经部署好zabbix-server和zabbix-agent,并正常使用的前提下,介绍如何配置zabbix监控mysql主从复制状态

1. 创建监控脚本

首先咱们需要在zabbix-agent服务器上创建一个可以获取mysql主从复制状态的脚本

#!/bin/bash
#author: lining
HOSTIP=$1
PASSWORD=${2:-"bCHSZ8vJ67Yv4Hom"}
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界面,配置>主机>选中要创建监控项的主机>监控项>创建监控项

zabbix监控mysql主从复制状态_第1张图片

配置好以后点击添加即可

等待一会就可以在最新数据里看到获取到的数据

如有疑问欢迎留言私信

 

你可能感兴趣的:(zabbix)