7. 監控MySQL主從狀態
在生產環境裡,常見的MySQL架構使用最多的就是主從了,所以對於主從是否同步資料的監控尤為重要。如果使用了專業的監控軟體(如zabbix)監控MySQL,那麼選擇監控工具提供的模板或外掛去監控非常方便,但如果涉及到一些特殊要求就另當別論了。當然還可以寫shell指令碼來實現定製化的需求,本案例需要寫一個shell指令碼來監控MySQL主從。
具體要求如下:
1)每分鐘檢測一次,本次執行指令碼時要檢測上一次是否執行完成,如果還未完成則本次不執行;
2)如果不同步需要傳送告警郵件給admin@admin.com;
3)做告警收斂,在沒有解決問題之前每隔30分鐘發一次告警郵件;
4)假設mysql賬戶為root,密碼是tpH40kznv 。
郵件指令碼如下:
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mine.text import MIMEText
import sys
mail_host = 'stmp.163.com'
mail_user = 'test@163.com'
mail_pass = 'your_mail_password'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix 監控告警平臺"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,'plain','utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib:SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__"
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
參考指令碼如下:
# vim /usr/local/sbin/mysql_check.sh
#!/bin/bash
#檢測MySQL主從是否同步
#把指令碼名字存入變數s_name
s_name=`echo $0 |awk -F '/' '{print $NF}'`
mysql_c="mysql -uroot -ptpH40kznv"
#定義收件人郵箱
mail="/usr/local/sbin/mail.py"
mail_user=admin@admin.com
#該函式實現郵件告警收斂
m_mail()
{
log=$1
t_s=`date +%s`
t_s2=`date -d "1 hour ago" +%s`
if [ ! -f /tmp/$log ]
then
touch /tmp/$log #建立$log檔案
chattr +a /tmp/$log #增加a許可權,僅允許追加內容
echo $t_s2 >> /tmp/$log #第一次告警,可直接寫入1小時前的時間戳
fi
t_s2=`tail -1 /tmp/$log |awk '{print $1}'` #檢視$log檔案最後一行的時間戳
echo $t_s >> /tmp/$log #取出最後一行即上次告警的時間戳後,立即寫入當前的時間戳
v=$[$t_s-$t_s2] #取兩次時間戳差值
if [ $v -gt 1800 ] #差值如果超過1800s,立即發郵件
then
python $mail $mail_user $1 "`cat $2`" 2>/dev/null #發郵件,$2為mail函式第二個引數,這裡是一個檔案
echo "0" > /tmp/$log.count #定義計時器臨時檔案,並寫入0
else
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count #如果計時器臨時檔案不存在,需要建立並寫入0
fi
nu=`cat /tmp/$log.count`
nu2=$[$nu+1] #30分鐘內每發生一次告警,計數器加1
echo $nu2 > /tmp/$log.count
if [ $nu2 -gt 30 ]
then
python $mail $mail_user "$1 30min" "`cat $2`" 2>/dev/null
echo "0" > /tmp/$log.count #第二次告警後,計數器歸0
fi
fi
}
#把程式情況存入臨時檔案
ps aux |grep "$s_name" |grep -vE "$$|grep" > /tmp/ps.tmp #$$為本程式PID
p_n=`wc -l /tmp/ps.tmp |awk '{print $1}'`
#當程式數大於0,則說明上次的指令碼還未執行完
if [ $p_n -gt 0 ]
then
exit
fi
#先執行一條 show processlist,看是否執行成功
$mysql_c -e "show processlist" >/tmp/mysql_pro.log 2>/tmp/mysql_log.err
#如果上一條命令執行不成功,說明這個MySQL服務出現了問題
if [ $? -gt 0 ]
then
m_mail mysql_service_error /tmp/mysql_s.log
else
$mysql_c -e "show slave status\G" > /tmp/mysql_s.log
n1=`wc -l /tmp/mysql_s.log |awk '{print $1}'`
if [ $n1 -gt 0 ]
then
y1=`grep 'Slave_IO_Running:' /tmp/mysql_s.log |awk -F : '{print $2}' |sed 's/ //'`
y1=`grep 'Slave_MYSQL_Running:' /tmp/mysql_s.log |awk -F : '{print $2}' |sed 's/ //'`
if [ $y1 == "No" ] || [ $y2 == "No" ]
then
m_mail mysql_slavestatus_error /tmp/mysql_s.log
fi
fi
fi
增加計劃任務:
* * * * * /bin/bash /usr/local/sbin/mysql_check.sh
相關文章
- Shell指令碼監控MySQL主從狀態指令碼MySql
- zabbix應用-監控mysql slave 主從狀態MySql
- MySQL MHA 執行狀態監控MySql
- 巧用Zabbix自定義監控Mysql效能狀態MySql
- mysql檢視主從同步狀態的方法MySql主從同步
- Mysql 主從延時監控(pt-heartbeat)詳解MySql
- Docker 之 執行狀態監控Docker
- 專案實戰:zabbix監控MySQL狀態、服務資訊MySql
- 手把手教你搭建高逼格監控平臺,第四彈,監控主機存活狀態
- Docker 快速搭建主從 + 哨兵監控Docker
- 利用superlance監控supervisor執行狀態
- 怎麼監控 Linux 伺服器狀態?Linux伺服器
- springCloud入門學習--Hystrix狀態監控SpringGCCloud
- 資料庫效能大揭秘:玩轉MySQL監控指標狀態變數資料庫MySql指標變數
- 基於websocket的celery任務狀態監控Web
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI
- 使用Nagios打造專業的業務狀態監控iOS
- 2. 監控nginx伺服器502狀態碼Nginx伺服器
- WGLCOUD 使用手冊 - 監控攝像頭的狀態
- 3-主機監控、應用監控
- Zabbix新增主機監控-zabbix+grafana從零設計自己的監控平臺Grafana
- MySQL監控工具MySql
- iStat Menus:Mac系統狀態監控的終極利器Mac
- git實戰-linux定時監控github更新狀態(二)LinuxGithub
- 【flask】使用prometheus_client監控服務相關狀態FlaskPrometheusclient
- jProfiler遠端連線Linux監控jvm、tomcat執行狀態LinuxJVMTomcat
- PIGOSS BSM 如何實現伺服器硬體狀態監控?Go伺服器
- NiosII+GPS/GSM實現汽車狀態監控系統iOS
- 動態監控程式
- MySQL sys效能監控MySql
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- 乾貨:教你如何監控 Java 執行緒池執行狀態Java執行緒
- mac系統狀態監控工具 iStat Menus for Mac 中文破 解版Mac
- 新增橋接連線狀態監控、重構日誌系統橋接
- 智慧工廠裝置狀態視覺化監控解決方案視覺化
- openwrt,狀態監測netdata
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- 【mysql】mysql的資料庫主從(一主一從)MySql資料庫