用Zabbix监控Mysql主从同步状态

时间:2024-03-22 19:29:29

现在Zabbix和Mysql是企业里用的越来越多的两款开源软件了,这里的话简单的介绍一下怎么用Zabbix监控Mysql,Zabbix和Mysql的搭建网上很多教程,这里就不写了

环境介绍:
机器:阿里云主机 (阿里云上的服务器默认有些端口是没有开放的,如果在阿里云上搭建了zabbix的服务器需要在阿里云上把安全组进出的zabbix端口都打开,我在搭建工程中被这个坑过!)
系统:CentOS7.3
Mysql:5.7.17
Zabbix:3.4.13

MySQL同步功能由3个线程(master上1个,slave上2个)来实现,简单的说就是:master发送日志一个,slave接收日志一个,slave运行日志一个。
首先,我们解释一下 show slave status 中重要的几个参数:
Slave_IO_Running: I/O线程是否被启动并成功地连接到主服务器上。
Slave_SQL_Running: SQL线程是否被启动。
Seconds_Behind_Master:本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已经过的秒数。当此线程被从属服务器I/O线程赶上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。
那么如何监控从服务器是否正常运行呢?

1、 创建监控MYSQL的账号
#mysql -uroot -p密码
mysql> grant replication client on . to ‘zabbix’@‘localhost’ identified by ‘[email protected]’;

2、写一个提取Mysql主从数据的脚本,在此之前先执行一个命令(用来测试创建的用户是否可以用)
[[email protected]_test1 ~]# mysql -uzabbix -p’[email protected]’ -e 'show slave status\G;’

这条命令的作用是用刚才创建的监控用户在命令行就获取Mysql主从的信息,但是信息有点多,我们只选择我们要的两条,我们在输出的信息中选择
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

当数据库的主从出现异常的时候,Slave_SQL_Running就会变成No,当数据库主从不存在的时候,两个都会变成No

3、上脚本
#cat /etc/zabbix/zabbix_agentd.d/mysql_slave_status.sh
#!/bin/bash
mysql -uzabbix -p’[email protected]’ -e ‘show slave status\G’ 2>/dev/null |grep -E “Slave_IO_Running|Slave_SQL_Running”|awk ‘{print $2}’|grep -c Yes

我只写了一条命令,这里详细说明一下它的意思;
先用zabbix这个用户来获取slave的所有状态,然后用2>/dev/null屏蔽掉在命令行输出密码警告提示信息(mysql在命令行输入密码会有一个提示信息,为了后面过滤的时候不要出现把它丢进黑洞里),然后grep出这两个状态,然后再输出第二列,最后查看有几个Yes状态的,正常情况下有两个Yes状态。

4、把这个脚本加到监控项里面去,先到被监控的服务器上的监控项目录里,我的是在/etc/zabbix/zabbix_agentd.d/里(默认是在这里,修改过的话找一下配置文件里指向哪)想要自定义监控项就在这个监控项目录里创建一个以*.conf格式结尾的文件

#vim /etc/zabbix/zabbix_agentd.d/mysql_slave_status.conf
UserParameter=mysql.replication,/etc/zabbix/zabbix_agentd.d/mysql_slave_status.sh

#这里解释一下这个配置文件,UserParameter是自定义zabbix监控项的固定格式,必须要写, =号后面跟的是你要给这个监控项取的名字 而逗号后面的就是你这个监控项要执行的命令或者脚本文件

添加好之后,就重启agent程序
#systemctl restart zabbix-agent.service

5、去zabbix-server上测试一下刚才在被监控的机器上自定义的监控项有没有生效
#解释一下 zabbix_get -s 目标IP -k"监控项,刚才=号后面的"
[email protected]:~ # zabbix_get -s 172.18.30.188 -k “mysql.replication”
2
这里的172.18.30.188 是我的被监控端的IP,如果主从复制正常,就会返回2 (代表两个状态都是Yes),现在就说明Server已经可以从agent获取状态了,现在在管理界面中先添加监控项:

6、登到zabbix的web界面去设置
配置—>模版—>创建模板
名称随便取,把要监控的主机添加进模板里
用Zabbix监控Mysql主从同步状态

然后点击监控项—>创建监控项
用Zabbix监控Mysql主从同步状态

需要我们配置的如下
用Zabbix监控Mysql主从同步状态

保存后继续 配置—>模板—>触发器—>创建触发器
用Zabbix监控Mysql主从同步状态

用Zabbix监控Mysql主从同步状态
表达式:{Template DB MySQL:mysql.replication.last()}<2 #括号里的内容换成人话是是模板名:监控项名.最后的数值小于<2

至此添加完毕~!
注:此博客非专业技术指导博客,只作为分享和记录自己的工作历程,可以作为参考,每个公司的环境不同,请勿照搬命令和配置~