IDC兩臺機器上部署了Nginx+Keepalived主從模式的LB代理負載層,現在需要對LB進行每日巡檢和服務監控,利用SendEmail郵件監控。
0)SendEmail部署
參考:http://www.cnblogs.com/kevingrace/p/5961861.html
1)SendEmail指令碼配置
[root@NG-LB01 ~]# vim /opt/sendemail.sh #!/bin/bash # Filename: SendEmail.sh # Notes: 使用sendEmail # # 指令碼的日誌檔案 LOGFILE="/tmp/Email.log" :>"$LOGFILE" exec 1>"$LOGFILE" exec 2>&1 SMTP_server='smtp.test.com' username='monit@test.com' password='monit@123' from_email_address='monit@test.com' to_email_address="$1" message_subject_utf8="$2" message_body_utf8="$3" # 轉換郵件標題為GB2312,解決郵件標題含有中文,收到郵件顯示亂碼的問題。 message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF $message_subject_utf8 EOF` [ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8" # 轉換郵件內容為GB2312,解決收到郵件內容亂碼 message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF $message_body_utf8 EOF` [ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8" # 傳送郵件 sendEmail='/usr/local/bin/sendEmail' set -x $sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312 傳送郵件測試(傳送郵件到kevin@test.com郵箱裡): [root@NG-LB01 ~]# chmod 755 /opt/sendemail.sh [root@NG-LB01 ~]# /opt/sendemail.sh kevin@test.con "郵件測試" "sendemail傳送郵件啦!"
2)LB每日巡檢指令碼(VIP資源為10.0.11.26)
[root@NG-LB01 ~]# cat /opt/LB_CHECK.sh #!/bin/bash HOSTNAME=$(hostname) IP=$(ifconfig|grep 10.0.11|awk '{print $2}'|cut -d":" -f2) DATE=$(date +%Y.%m.%d-%H.%M.%S) NUM1=$(ps -ef|grep nginx|grep -v grep|wc -l) NUM2=$(ps -ef|grep keepalived|grep -v grep|wc -l) NUM3=$(ip addr|grep 10.0.11.26|grep -v grep|wc -l) if [ $NUM1 -ne 0 -a $NUM2 -ne 0 -a $NUM3 -ne 0 ];then /bin/bash /opt/sendemail.sh kevin@test.com "IDC外網LB每日巡檢" "各位兄弟,注意啦! \nIDC外網LB目前健康快樂地跑在$HOSTNAME-$IP伺服器上呢,一切正常! \n大夥兒可以放心地去釣魚吧" fi 每天早上8:30進行巡檢 [root@NG-LB01 ~]# chmod 755 /opt/LB_CHECK.sh [root@NG-LB01 ~]# crontab -l 30 8 * * * source /etc/profile;/bin/bash -x /opt/LB_CHECK.sh > /dev/null 2>&1 由於手動執行指令碼沒問題,而在crontab裡定時自動執行可能會出現問題,故加上source /etc/profile
3)LB監控指令碼
[root@NG-LB01 ~]# cat /opt/LB_MONIT.sh #!/bin/bash HOSTNAME=$(hostname) IP=$(ifconfig|grep 10.0.11|awk '{print $2}'|cut -d":" -f2) DATE=$(date +%Y.%m.%d-%H.%M.%S) NUM1=$(ps -ef|grep nginx|grep -v grep|wc -l) NUM2=$(ps -ef|grep keepalived|grep -v grep|wc -l) NUM3=$(ip addr|grep 10.0.11.26|grep -v grep|wc -l) if [ $NUM1 -eq 0 -o $NUM2 -eq 0 -o $NUM3 -eq 0 ];then /bin/bash /opt/sendemail.sh kevin@test.com "IDC外網LB執行情況監控" "告警主機:$HOSTNAME \n主機IP: $IP \n告警時間:$DATE \n告警等級:十分嚴重啊 \n告警資訊:外網LB目前已不在$HOSTNAME伺服器上正常執行,快點檢視VIP是否轉移到另一個LB節點,並確認LB服務是否正常提供! \n問題詳情:LB failed on $HOSTNAME \n當前狀態: PROBLEM" else echo "IDC外網LB目前執行良好" fi 每1分鐘監控一次 [root@NG-LB01 ~]# chmod 755 /opt/LB_MONIT.sh [root@NG-LB01 ~]# crontab -l * * * * * source /etc/profile;/bin/bash -x /opt/LB_MONIT.sh > /dev/null 2>&1
溫馨提示
if [ $NUM1 -ne 0 -a $NUM2 -ne 0 -a $NUM3 -ne 0 ] 等同於 if [ $NUM1 -ne 0 ] && [ $NUM2 -ne 0 ] && [$NUM3 -ne 0 ] if [ $NUM1 -eq 0 -o $NUM2 -eq 0 -o $NUM3 -eq 0 ] 等同於 if [ $NUM1 -eq 0 ] || [ $NUM2 -eq 0 ] || [$NUM3 -eq 0 ]
郵件報警效果如下: