首页 > 技术文章 > 通过脚本实现对web的健康检查

zyxnhr 2019-04-18 09:19 原文

前面的文章中(https://www.cnblogs.com/zyxnhr/p/10707932.html),通过nginx的第三方模块实现对web端的一个监控,现在通过一个脚本实现对第三方的监控

脚本实现web的健康检查

1、编写脚本

[root@lb01 ~]# vim /script/nginx_check.sh

#!/bin/bash
#定义需要监控的节点
rs_arr=(
172.25.254.134
172.25.254.135
)
file_location=/usr/local/nginx/html/test.html
#定义函数web_result用于检测RS节点的web服务状态
function web_result {
  rs=`curl -I -s $1/index.html|awk 'NR==1{print $2}'`
  return $rs
}
#定义函数new_row用于根据固定样式产生html表格框架
function new_row {
cat >> $file_location <<eof
<tr>
<td bgcolor="$4">$1</td>
<td bgcolor="$4">$2</td>
<td bgcolor="$4">$3</td>
</tr>
eof
}
#定义函数auto_html通过并调用new_row冰箱其传递参数填充表格内容
function auto_html {
    web_result $2
    rs=$?
    if [ $rs -eq 200 ]
    then
    new_row $1 $2 up green
    else
    new_row $1 $2 down red
    fi
}

while true
do
#产生头部部分
cat >> $file_location <<eof
<h4>The Status Of RS :</h4>
<table border="1">
<tr>
<th>NO:</th>
<th>IP:</th>
<th>Status:</th>
</tr>
eof

#循环产生每个节点的表格信息
for ((i=0;i<${#rs_arr[*]};i++));do
auto_html $i ${rs_arr[$i]}
done

#产生表格结尾部分
cat >> $file_location <<eof
</table>
eof

sleep 2
>$file_location #每一次循环晴空一次html文件
done

2、修改配置文件

[root@lb01 ~]# vim /usr/local/nginx/conf/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
upstream  web_pools {
        server 172.25.254.134:80 weight=5;
        server 172.25.254.135:80 weight=5;
}
    server {
        listen       80;
        server_name  www.lbtest.com;
        location / {
            root   html;
            index  test.html index.htm;
           # proxy_set_header Host $host;
           # proxy_pass http://web_pools;
        }
    }
}

3、执行脚本

[root@lb01 ~]# sh /script/nginx_check.sh 

4、 浏览器访问看结果

看test.html

[root@lb01 ~]# watch -n 1 "cat /usr/local/nginx/html/test.html"
<h4>The Status Of RS :</h4>
<table border="1">
<tr>
<th>NO:</th>
<th>IP:</th>
<th>Status:</th>
</tr>
<tr>
<td bgcolor="green">0</td>
<td bgcolor="green">172.25.254.134</td>
<td bgcolor="green">up</td>
</tr>
<tr>
<td bgcolor="green">1</td>
<td bgcolor="green">172.25.254.135</td>
<td bgcolor="green">up</td>
</tr>
</table>

5、关闭172.25.254.134的httpd

[root@web1 image]# systemctl stop httpd

查看test.html

[root@lb01 ~]# watch -n 1 "cat /usr/local/nginx/html/test.html"
<h4>The Status Of RS :</h4>
<table border="1">
<tr>
<th>NO:</th>
<th>IP:</th>
<th>Status:</th>
</tr>
<tr>
<td bgcolor="red">0</td>
<td bgcolor="red">172.25.254.134</td>
<td bgcolor="red">down</td>
</tr>
<tr>
<td bgcolor="green">1</td>
<td bgcolor="green">172.25.254.135</td>
<td bgcolor="green">up</td>
</tr>
</table>

6、 恢复

[root@web1 image]# systemctl start httpd

查看test.html

[root@lb01 ~]# watch -n 1 "cat /usr/local/nginx/html/test.html"
<h4>The Status Of RS :</h4> <table border="1"> <tr> <th>NO:</th> <th>Status:</th> </tr> <tr> <td bgcolor="green">0</td> <td bgcolor="green">172.25.254.134</td> <td bgcolor="green">up</td> </tr> <tr> <td bgcolor="green">1</td> <td bgcolor="green">172.25.254.135</td> <td bgcolor="green">up</td> </tr> </table

已经实现了对web端的监控

7、添加监控节点

当需要添加节点时。只要在脚本的 rs_arr定义新的IP节点就可以了

rs_arr=(
172.25.254.134
172.25.254.135
NEW_IP
)

同时,在我们启动了脚本之后,监控到web端有变化,这时html已经发生变化,但是浏览器仍然停留在上一个页面,需要刷新才能跟新页面,这里用的是Google浏览器,有同一个自动刷新插件,设置1秒刷新一次,就保证了html的实时性! 


参考:老男孩教育视频公开课https://www.bilibili.com/video/av25869969/?p=33

推荐阅读