致敬母校:老男孩Linux培训(只培养IT精英)
老男孩老师博客地址:
这是在学习Nginx反向代理的一道考试题,内容如下:
开发监控Nginx RS节点状态的插件,通过Web界面展示(接近实时2秒刷新1次),宕机的节点颜色设置为红色,正常节点颜色为绿色。
Shell代码如下:
#!/bin/bash
#后端RS节点IP
rsip=(
10.0.0.9
10.0.0.10
)
refreshtime=2 #浏览器客户端自动刷新间隔时间
idletime=2 #脚本执行间隔时间
statushtml=/usr/local/nginx/html/status.html #生成的HTML文件
#增加Table标签
function addTable() {
cat >${statushtml}<<EOF
<html>
<head>
<meta http-equiv="refresh" content="$refreshtime"> #浏览器客户端自动刷新间隔;
<title>RS Status</title>
</head>
<body>
<table border="1" width="25%">
<tr>
<td>Host</td>
<td>Type</td>
<td>Status</td>
</tr>
EOF
}
#增加RS节点状态信息
function addContent() {
cat >>${statushtml}<<EOF
<tr>
<td>$1</td>
<td>$2</td>
<td style="background:$3;">$4</td>
</tr>
EOF
}
#增加HTML结尾
function addEnding() {
cat >>${statushtml}<<EOF
</table>
</body>
</html>
EOF
}
while true
do
addTable
for ((i=0;i<`echo ${#rsip[*]}`;i++))
do
ip=${rsip[$i]}
httptype=$(curl -s -I http://${ip} | grep 'Server' | awk -F '[ /]' '{print $2}') #获取Web软件名称
color="red"
serverstatus="Down"
httpcode=$(curl -o /dev/null -s -w %{http_code} #获取RS返回的状态码
if [ $httpcode == '200' ]
then
color="green"
serverstatus="OK"
fi
if [ -z $httptype ]
then
httptype="Unknown"
fi
addContent $ip $httptype $color $serverstatus
done
addEnding
sleep $idletime
done
小结:
1、由于略懂HTML语法,生成的HTML页面有待优化;
2、此脚本仅供参考,有更智能的方法,参考nginx_upstream_check_module;
3、可以增加一个邮件报警功能;
4、此脚本如有不对的地方,请指正;