1)腳本需求:開通一個經過web界面展現監控Nginx負載節點的狀態。當節點宕機時,以紅色展現,當節點正常時以綠色展現。html
2)腳本解答:
nginx
[root@localhost scripts]# cat monitor.sh web
#!/bin/bash後端
#this scripts is created by ywxi at 2018-05-11瀏覽器
RIPS=( #定義監測節點池bash
192.168.1.22服務器
192.168.1.33app
192.168.1.30框架
)curl
file_location=/usr/share/nginx/html/test.html #默認yum安裝nginx的站點目錄路徑
[ -e "$file_location" ]||mkdir -p `dirname $file_location` #判斷目錄是否存在
function web_result { #定義curl請求狀態值
rs=`curl -I -s $1|awk 'NR==1{print $2}'`
return $rs
}
function new_row { #定義web框架
cat >> $file_location <<eof
<tr>
<td bgcolor="$4">$1</td>
<td bgcolor="$4">$2</td>
<td bgcolor="$4">$3</td>
</tr>
eof
}
function auto_html { #定義節點狀態返回值顯示的web界面
web_result $2
rs=$?
if [ $rs -eq 200 ]
then
new_row $1 $2 up green
else
new_row $1 $2 down red
fi
}
function main(){ #定義web框架
while true
do
cat >> $file_location <<eof
<h4>ywxi Nginx Service Status Of RS :</h4>
<meta http-equiv="refresh" content="1">
<table border="1">
<tr>
<th>NO:</th>
<th>IP:</th>
<th>Status:</th>
</tr>
eof
for ((i=0; i<${#RIPS[*]}; i++));do #對節點作循環判斷,並提供對應的html代碼
auto_html $i ${RIPS[$i]}
done
cat >> $file_location<<eof
</table>
eof
sleep 2
> $file_location #清空文件內容
done
}
main $*
3)腳本執行:
[root@localhost scripts]# sh monitor.sh
瀏覽器訪問http://192.168.1.22/test.html(前提是部署好了http服務,test.html放在對應的html目錄下,給予權限便可。)
出現以下頁面表示腳本運行正常:
宕掉一臺192.168.1.33節點,看下狀況
[root@localhost scripts]# ifconfig | sed -n 2p | awk '{print $2}'
addr:192.168.1.33
[root@localhost scripts]# /etc/init.d/nginx stop
Stopping nginx: [ OK ]
用Tengine(Nginx的分支)模塊nginx_upstream_check_module,提供主動式後端服務器節點健康檢查。可參考http://www.javashuo.com/article/p-kcvfudyx-da.html