zabbix從庫若是複製有問題,在主庫機器有問題的時候,切爲主就會致使數據的丟失。或者主從分離的時候,若是從庫出現延時狀態的話,會致使前端頁面展現的數據不是爲最新的數據。所以,監控mysql從庫的狀態是必要的。前端
mysql從庫的狀態主要監控的值有三個,分別爲Slave SQL Running,Slave IO Running和Seconds Behind Master。只有當Slave SQL Running,Slave IO Running爲yes,而後Seconds Behind Master爲0的時候,從庫纔有可能運行在正常的狀態下(有時候這三個值都符合要求,從庫數據也會有問題)。先看下監控的效果:python
因爲是自動發現監控的mysql從庫狀態,所以,先貼下自動發現規則的配置,使用mysql.slave.discover去獲取mysql從庫的端口,在從庫安裝zabbix agentd,並添加配置(UserParameter=mysql.slave.discover,python /usr/local/zabbix/discover_mysql_slave.py):mysql
其中,自動發現mysql端口的python腳本見:https://my.oschina.net/zhuangweihong/blog/785919 此文章有相似的腳本。自動發現完mysql的端口後,使用的探測項目原型以下,使用三個原型去獲取mysql從庫的三個須要監控的值:sql
其中獲取的鍵值須要在從庫agent中添加配置,而後重啓agentd:bash
UserParameter=mysql.slave.status[*],sh /usr/local/zabbix/check_mysql_slave.sh -u xxx-p xxx -P $1 -k $2 2>/dev/null.net
最後就看下/usr/local/zabbix/check_mysql_slave.sh腳本,以下:code
#!/bin/sh while getopts "u:p:P:k:" opt do case $opt in u ) user=$OPTARG;; p ) password=$OPTARG;; P ) port=$OPTARG;; k ) key=$OPTARG;; ? ) echo 'parameter is wrong!' exit 1;; esac done if [ ! "${user}" ] || [ ! "${password}" ] || [ ! "${port}" ] || [ ! "${key}" ];then echo "parameter is null" exit 1 fi mysql -u ${user} -p${password} -h 127.0.0.1 -P${port} -e "show slave status\G"|grep "${key}\:"|awk '{print $2}'
腳本使用-u傳入用戶名,-p傳入密碼,-P傳入端口號,-k傳入須要獲取show slave status\G的某個值。blog
Zabbix實戰教程:https://edu.51cto.com/sd/36433教程