开发程序实现nginx代理节点状态检查及WEB界面展示

实现功能介绍:

利用shell程序及http服务巧妙的实现监控nginx代理节点状态检查,然后通过web界面实时刷新显示结果,是不是有些吃惊这样高大上的程序?那就赶紧看看吧!
to用人单位:此课程可以体现学生shell编程功力,以及对nginx proxy企业实战及驾驭的能力。

不同的同学的三个实现方法分享,各位看官,你们看看哪个同学的更好,请评论。

第一个实现脚本:youjinyi 视频下载看地址http://down.51cto.com/data/1914201

#!/bin/sh
port=80
conf_path="/application/nginx/conf"
conf_file="nginx.conf"
html_path="/application/nginx/html"
html_file="monitor.html"
RS=($(grep WEB-A "$conf_path/$conf_file"|grep -v ‘#‘|awk -F"[ :]+" ‘{print $2}‘))

function proxy_delRs()
{  
 local ip=$1
 sed -i ‘/‘$ip‘/s/\(.*\);/\1 down;/g‘ "$conf_path/$conf_file" &> /dev/null
 [ $? -eq 0 ] && return 0 || return 1
}
function proxy_addRs()
{
 local ip=$1
 sed -i ‘/‘$ip‘/s/\(.*\)down;/\1;/g‘ "$conf_path/$conf_file" &> /dev/null
 [ $? -eq 0 ] && return 0 || return 1
}
function proxy_getWebServerType()
{
 local ip=$1
 local srvType=$(curl -I -s $ip|awk ‘/^Server/{print $2}‘|cut -b1-5)
 if [ "$srvType" == "Apach" ];then
  return 1
 elif [ "$srvType" == "nginx" ];then
  return 0
 else
  return 2
 fi
}
function proxy_getRsStatus()
{
 local ip=$1
 if cat $conf_path/$conf_file|grep "$ip:$port\(.*\)down;" &>/dev/null;then
  return 0
 else
  return 1
 fi
}
function proxy_checkRsHealth()
{
 local ip=$1
 if [ "$(nmap $ip -p $port|awk ‘/80/{print $2}‘)" == "open" ];then
  return 0
 else 
  return 1
 fi
}
function proxy_checkHtml()
{
 
 if [ ! -f "$html_path/$html_file" ];then
  proxy_htmlInit
 fi
}
function proxy_sendStatToHtml()
{
 local rs=$1
 local string=$2

 if [ $string == "Good" ];then
  sed -i /‘<td id=‘${rs}‘_stat‘/s#.*#‘    <td id=‘$rs‘_stat align="center" bgcolor="green"> Good </td>‘#g $html_path/$html_file  &>/dev/null
 else
  sed -i /‘<td id=‘${rs}‘_stat‘/s#.*#‘    <td id=‘$rs‘_stat align="center" bgcolor="red"> Bad </td>‘#g $html_path/$html_file &>/dev/null
 fi
 
 proxy_getWebServerType $rs
 case $? in
 0)
  sed -i /‘<td id=‘${rs}‘_type‘/s#.*#‘    <td id=‘${rs}‘_type align="center"> Nginx </td>‘#g $html_path/$html_file  &>/dev/null
 ;;
 1)
  sed -i /‘<td id=‘${rs}‘_type‘/s#.*#‘    <td id=‘${rs}‘_type align="center"> Apache </td>‘#g $html_path/$html_file  &>/dev/null
 ;;
 2)
  sed -i /‘<td id=‘${rs}‘_type‘/s#.*#‘    <td id=‘${rs}‘_type align="center"> Unknow </td>‘#g $html_path/$html_file  &>/dev/null
 ;;
 *)
 ;;
 esac
}
function proxy_htmlInit()
{
 echo  ‘<html>
 <head><h4 align="center"><font size="14"  style="color:grey"> Cluster Web Service Health Check</front></h4> 
 <meta http-equiv="refresh" content="1"> 
  <style> 
  tr,td{font-size:28px; 
  } 
  </style> 
 </head>
 <body>
  <table border=1 align="center">
   <tr size=20>
    <td bgcolor="Cyan" align="center"> Real Server Type </td>
    <td bgcolor="Cyan" > Real Server Host </td>
    <td bgcolor="Cyan" align="center"> Real Server Status </td>
   </tr>‘ > $html_path/$html_file 
 for rs in ${RS[@]}
 do
 proxy_getWebServerType $rs
 case $? in
 0)
 echo ‘   <tr size=20>
      <td id=‘${rs}_type‘ align="center"> Nginx </td>
      <td align="center"> ‘$rs‘ </td>‘ >> $html_path/$html_file
 ;;
 1)
 echo ‘   <tr size=20>
      <td id=‘${rs}_type‘ align="center"> Apache </td>
      <td align="center"> ‘$rs‘</td>‘ >> $html_path/$html_file
 ;;
 2)
 echo ‘   <tr size=20>
      <td id=‘${rs}_type‘ align="center"> Unknow </td>
      <td align="center"> ‘$rs‘</td>‘ >> $html_path/$html_file
 ;;
 *)
 ;;
 esac
 
 if proxy_checkRsHealth $rs;then
 echo ‘   <td id=‘${rs}_stat‘ align="center" bgcolor="green"> Good </td>
   </tr>‘ >> $html_path/$html_file
 else
 echo ‘   <td id=‘${rs}_stat‘ align="center" bgcolor="red"> Bad </td>
   </tr>‘ >> $html_path/$html_file
 fi
 done

 echo ‘  </table>
 </body>
</html>‘ >> $html_path/$html_file
}
function proxy_checkHealthHandler()
{
 proxy_checkHtml
 for rs in ${RS[@]}
 do
  if proxy_checkRsHealth $rs;then
   if proxy_getRsStatus $rs;then
    proxy_addRs $rs
    proxy_sendStatToHtml $rs "Good"
   fi 
  else
   if ! proxy_getRsStatus $rs;then
    proxy_delRs $rs
    proxy_sendStatToHtml $rs "Bad"
   fi 
  fi
 done
}
function main()
{
 proxy_htmlInit
 while true
 do
  proxy_checkHealthHandler
  sleep 1
 done
}
main

第二个同学实现脚本:王硕 下载看讲解视频地址http://down.51cto.com/data/1914011

#!/bin/bash
#Author: Stanley Wang
#mail: 
#Version: 1.0
#Description: This is a script for nginx proxy health check.
#
###def vars##########
RS=(
  172.16.1.191
  172.16.1.192
)
PORT=80
html_file="/var/html/www/index.html"
declare -a RSTATUS
###main##############
function checkrs(){
  local I=0
  for ((I=0;I<${#RS[*]};I++))
  do
    RSTATUS[$I]=`nmap ${RS[$I]} -p $PORT|grep "open"|wc -l`
  done
}
function output(){
    if [ ${RSTATUS[0]} -eq 0 ];then
      #echo "${RS[$i]} is down!"
      sed -i ‘22 s/.*/<td align="center" bgcolor="red"><font size="15">Down!<\/font><\/td>/g‘ $html_file
    elif [ ${RSTATUS[0]} -eq 1 ];then
      #echo "${RS[$i]} is OK!"
      sed -i ‘22 s/.*/<td align="center" bgcolor="green"><font size="15">OK!<\/font><\/td>/g‘ $html_file
    fi
    if [ ${RSTATUS[1]} -eq 0 ];then
      #echo "${RS[$i]} is down!"
      sed -i ‘28 s/.*/<td align="center" bgcolor="red"><font size="15">Down!<\/font><\/td>/g‘ $html_file
    elif [ ${RSTATUS[1]} -eq 1 ];then
      #echo "${RS[$i]} is OK!"
      sed -i ‘28 s/.*/<td align="center" bgcolor="green"><font size="15">OK!<\/font><\/td>/g‘ $html_file
    fi
}
while true
do
  checkrs
  output
sleep 2
done

第三个实现脚本:刘磊 下载看讲解视频http://down.51cto.com/data/1914011

#!/bin/bash
rs_arr=( 
    10.0.0.11
    10.0.0.22
    10.0.0.33
    )
file_location=/var/html/test.html
function web_result {
    rs=`curl -I -s $1|awk ‘NR==1{print $2}‘`
    return $rs
}
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
}
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
}

main(){
while true
do
cat >> $file_location <<eof
<h4>he 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<${#rs_arr[*]};i++)); do
    auto_html $i ${rs_arr[$i]}
done
cat >> $file_location <<eof
</table>
eof
sleep 2
> $file_location
done
}
main

 本文来自老男孩教育19期学生课后作业分享。

时间: 2024-12-29 23:06:30

开发程序实现nginx代理节点状态检查及WEB界面展示的相关文章

shell脚本:nginx反向代理节点状态检查

lvs可以使用ipvsam -Ln 查看RS节点的情况,当RS宕机后剔除,当RS恢复后自动加入,nginx上面无法查看,需要安装插件或自己写脚本实现: 反向代理的配置如下:(server 去掉前面的空格,为了方便后面脚本使用sed做文本替换:) [[email protected] vhosts]# cat upstream01.conf upstream backend { server 192.168.20.10:80 weight=5; server 192.168.20.11:80 we

Nginx负载节点状态监测脚本

 1)脚本需求:开通一个通过web界面展示监控Nginx负载节点的状态.当节点宕机时,以红色展示,当节点正常时以绿色展示.  2)脚本解答: [[email protected] scripts]# cat monitor.sh #!/bin/bash #this scripts is created by ywxi at 2018-05-11 RIPS=(                    #定义监测节点池 192.168.1.22 192.168.1.33 192.168.1.30 )

Nginx防盗链 Nginx访问控制 Nginx解析php相关配置 Nginx代理

12.13 Nginx防盗链cd /usr/local/nginx/conf/vhostvi test.com.conf将以上内容复制到下图位置测试,成功前提data/wwwroot/test.com目录下要有1.gif12.14 Nginx访问控制cd /usr/local/nginx/conf/vhostvi test.com.confFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=" alt="Nginx

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)     官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx_upstream_check_mod

Nginx实战系列之功能篇----后端节点健康检查(转)

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址:http://nginx.org/cn/docs/http/ng ... proxy_next_upstream2.nginx_upstream_check_module模块    官网网址:https:

Nginx负载均衡监控节点状态

利用第三方插件监控(淘宝开发的Tengine) 模块:nginx_upstream_check_module 实现web界面 下载补丁包 wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master 解压缩 unzip master drwxr-xr-x 6 root root   4096 11月 10 18:58 nginx_upstream_check_module-master cd n

Nginx负载均衡监测节点状态

Nginx负载均衡监测节点状态 v插件(ngx_http_upstream_check_module) upstream_check_module介绍: 该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure--with-http_upstream_check_module upstream_check_module官方文档 http://tengine.taobao.org/

nginx代理tomcat

http://blog.csdn.net/kongqz/article/details/6838989 http://www.800l.com/linux-nginx-tomcat-jdk.html http://wangxr66.iteye.com/blog/1559082 开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx

使用nginx代理weblogic负载方案

之前一直用apache来做weblogic的前端,由于nginx对静态内容的出色性能,不得不转投nginx.这里就不 再写weblogic的安装了. 安装nginx nginx需要pcre做支持,一般系统都自带,当然可以自己下载高版本的源码包安装,建议大家使用高版本的pcre, 这样使用正则的时候会有更好的支持. 首先去http://wiki.nginx.org//NginxChs下载nginx,我用了0.7 # tar zxvf nginx-0.7.59.tar.gz # cd nginx-0