IDC兩臺機器上部署了Nginx+Keepalived主從模式的LB代理負載層,如今須要對LB進行每日巡檢和服務監控,利用SendEmail郵件監控。html
0)SendEmail部署nginx
參考:http://www.cnblogs.com/kevingrace/p/5961861.html
1)SendEmail腳本配置vim
[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)bash
[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 ]
郵件報警效果以下:spa