基於Nginx+Keepalived的LB服務監控(郵件報警)

散盡浮華發表於2018-09-20

 

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 ]

郵件報警效果如下:

相關文章