Fork me on GitHub

Zabbix系列之《监控MySQL主从同步》

前言:通过zabbix自定义key来监控mysql主从的同步状态,本文主要是学习在实战过程中的技巧和自定义key的原理,希望对你有所启发。

一、监控效果展示

io进程的生命状态

其他两个进程,包括能看到延时是0毫秒。

在监控主机的最新数据里能看到监控的数据,本次设计只监控了slave同步最关注的三个数值:SQL进程,IO进程,延时等状态。

二、编写监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$  cat /var/lib/zabbix/scripts/mysql/check_mysql_slave.sh
#!/bin/bash
USER=root
PASS=xxxxxx

io_status(){
IoStatus=`mysql -u${USER} -p${PASS} -e "show slave status\G;" |grep -i running|sed -n 1p|awk '{print $NF}'`
if [ $IoStatus == "Yes" ];then
IoStatus=1
else
IoStatus=0
fi
echo $IoStatus
}

sql_status(){
SqlStatus=`mysql -u${USER} -p${PASS} -e "show slave status\G;" |grep -i running|sed -n 2p|awk '{print $NF}'`
if [ $SqlStatus == "Yes" ];then
SqlStatus=1
else
SqlStatus=0
fi
echo $SqlStatus
}

lag_status(){
DelayStatus=`mysql -u${USER} -p${PASS} -e "show slave status\G;" |grep "Seconds_Behind_Master"|awk '{print $NF}'`
echo $DelayStatus
}

$1

# 一定要给可执行权限,不然zabbix调用会失败哈。
$ chmod +x /var/lib/zabbix/scripts/mysql/check_mysql_slave.sh

脚本里将Yes转换成了1或0状态,1表示正常,0表示异常。这样设计的目的是为了zabbix添加触发器的时候方便判断。

当然你可以根据需求自己改动哈。脚本也还有许多可以优化的地方,自定义性比较强。

测试脚本可用性(写好了一定要先测试):

1
2
3
4
5
6
$ /var/lib/zabbix/scripts/mysql/check_mysql_slave.sh io_status
1
$ /var/lib/zabbix/scripts/mysql/check_mysql_slave.sh sql_status
1
$ /var/lib/zabbix/scripts/mysql/check_mysql_slave.sh lag_status
0

脚本测试没问题,接着继续…

三、配置zabbix自定义key

在zabbix_agentd配置文件里写入自定义key

1
2
3
4
$ vim /etc/zabbix/zabbix_agentd.conf

#mysql slave监控
UserParameter=mysql.slave[*],/var/lib/zabbix/scripts/mysql/check_mysql_slave.sh $1

技术点说明:

  • UserParameter,是声明自定义key的标识,zabbix agent会识别。
  • mysql.slave,是zabbix自定义key的名称,可以为任意字符串;
  • mysql.slave[*],zabbix支持模板传参,星号(*)可以传入任意值,传入的值供后面使用(看到那个$1了吗,$1就是用于接受参数的)
  • key与自定义脚本之间,使用逗号分隔,逗号后面是我们写的自定义脚本

通过zabbix agent测试自定义key是否能获取到值:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 配置zabbix运行通过127.0.0.1获取值
$ vim /etc/zabbix/zabbix_agentd.conf
Server=baidu.com,127.0.0.1

# 重启生效(自定义key和修改配置必须要重启)
$ /etc/init.d/zabbix_agentd restart

zw-r710-133 ~ # zabbix_get -s 127.0.0.1 -p 10050 -k "mysql.slave[io_status]"
1
zw-r710-133 ~ # zabbix_get -s 127.0.0.1 -p 10050 -k "mysql.slave[sql_status]"
1
zw-r710-133 ~ # zabbix_get -s 127.0.0.1 -p 10050 -k "mysql.slave[lag_status]"
0

zabbix_get工具的用途是模拟zabbix server来获取数据,如果zabbix_get能获取到数据,那说明你的agent端的配置没问题了。
剩下的就是去zabbix平台上配置监控项即可。

自定义key后,一定要记得使用zabbix_get测试,这一步测试尤为重要,很多人都忽略这一点。

四、创建监控模板

Zabbix系列之《监控TCP连接状态》一文中,我有详细说明如果创建zabbix监控模板,请参考!

创建好模板后,一次创建项目:

创建好的三个项目:

触发器:

五、主机添加模板

这一步就不用我说了吧。 略。

老规矩,你可以下载我的模板:mysql_slave.xml

看似简单的东西,你学会了,会变通吗?比如在工作中老大各种奇葩要求,需要监控交换机,动态流量等。如果学会了自定义key,你甚至可以自己写脚本,不用zabbix。来达到监控的目的都不成问题。

运维路漫长,且行且珍惜。欢迎加入QQ群:32330026,我们一起成长。

-------------本文结束感谢您的阅读-------------