xiaozeze 发表于 2019-2-13 00:16:40

开发shell脚本检查Nginx实战分享

开发shell脚本检查Nginx实战分享点这里查看视频讲解一、本脚本实现功能:1、自动检查Nginx下面的代理节点是否正常2、通过页面显示状态,有问题的节点给出页面报警及声音报警。3、增加新节点,页面自动载入新节点,无需修改程序。
二、守护检查脚本
[root@lb01 extra]# cd /server/scripts/[root@lb01 scripts]# vi nginx_check.sh#!/bin/bash# oldboy training 21 zhangyao# Defined variablesNginxDir=/application/nginxExtraPath=$NginxDir/conf/extraScriptDir=/server/scriptsStatusLog=$ScriptDir/status.logStatusHtml=$NginxDir/html/status/status.htmlStatusHtmlOri=$NginxDir/html/status/status.html.ori# Judge some files [ -d $NginxDir ] ||exit 1[ -d $ScriptDir ] ||mkdir -p $ScriptDir[ -f $StatusLog ] ||touch $StatusLog[ -f $StatusHtml ] ||touch $StatusHtml# Defined Check URL Functionsfunction check_url(){        status=`curl -s $2/check.html`        if [ "$status" == "OK" ]          then             echo "$1 $2 up" >>$StatusLog        else             echo "$1 $2 down" >>$StatusLog        fi}# Defined List URL and Check Functionsfunction check(){        >$StatusLog            cd $ExtraPath        for file in `ls`#首先遍历extra目录下的所有文件,然后遍历每个文件的IP行,将参数传给check_url          do          url=(`awk -F "[ ]+" '/server/ {print $3}' $file`)          for i in ${url[*]}              do                check_url $file $i          done        done}# Defined Html Table Format Functionsfunction table(){#将表格的一行语句累加后一次性插入html文件        char="<tr bgcolor="$1"><th>$2</th><th>$3</th><th>$4</th><th>$5</th></tr>"        sum="$sum""$char"}function html(){        Index=1#表格最左侧的一列,初始值为1        flag=0        sum=""   #行语句初始值null        /bin/cp $StatusHtmlOri $StatusHtml#将status html文件初始化        while read line#一行行读入$StatusLog文件,格式为dynamic_pools 10.0.0.6:80 up           do             array_line=($line)             if [ "${array_line}" == "up" ]             then                 table "#90EE90" $Index ${array_line[*]} #将颜色参数、index值及其他参数传给table函数             else                  table "#FF0000" $Index ${array_line[*]}               ((flag++)) #down情况下flag会计数             fi             ((Index++))        done<$StatusLog        [ $flag -eq 0 ] ||\#如果flag不为0,肯定有down机器,增加一个语音报警的功能,仿照zabbix      sum=$sum"<audio id="clickSound" autoplay="autoplay"><source src="warning.mp3" type="audio/mpeg"></audio>"        sed -i "/C0C0C0/a $sum" $StatusHtml#将sum语句插入html文件}# Defined Main Functionsfunction main(){        while true          do          check          html          sleep 5        done}main

三、相关文件status.html.ori<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="refresh" content="5"><title>Nginx http upstream check status</title></head><body><div align="center"><table width="1171" height="682" border="1">    <tr>      <td background="20150516194115.jpg" ><table align="center" style="background-color:white" cellspacing="0" cellpadding="3" border="1"><tr bgcolor="#C0C0C0"><th>Index</th><th>Upstream</th><th>Name</th><th>Status</th></tr></td>    </tr></table></div></body></html>

status.html<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="refresh" content="5"><title>Nginx http upstream check status</title></head><body><div align="center"><table width="1171" height="682" border="1">    <tr>      <td background="20150516194115.jpg" ><table align="center" style="background-color:white" cellspacing="0" cellpadding="3" border="1"><tr bgcolor="#C0C0C0"><th>Index</th><th>Upstream</th><th>Name</th><th>Status</th></tr></td><tr bgcolor=#90EE90><th>1</th><th>dynamic_pools</th><th>10.0.0.6:80</th><th>up</th></tr><tr bgcolor=#90EE90><th>2</th><th>static_pools</th><th>10.0.0.5:80</th><th>up</th></tr><tr bgcolor=#90EE90><th>3</th><th>static_pools</th><th>10.0.0.6:80</th><th>up</th></tr>    </tr></table></div></body></html>

四、nginx.conf站点配置worker_processes1;events {    worker_connections1024;}http {    include       mime.types;    default_typeapplication/octet-stream;    sendfile      on;    keepalive_timeout65;    include extra/static_pools;    include extra/dynamic_pools;    server {      listen       80;      server_name   www.etiantian.org;      location / {      if ($http_user_agent ~* "MSIE")          {             rewrite ^/ http://10.0.0.6/ie.html;            }            root   html;            indexindex.html index.htm;      }       location /p_w_picpath/ {         proxy_passhttp://static_pools;      include proxy.conf;       }       location /dynamic/ {      proxy_passhttp://dynamic_pools;      include proxy.conf;       }    }}extra/dynamic_pools包含文件upstream dynamic_pools {    server 10.0.0.6:80 weight=5;}extra/static_pools包含文件upstream static_pools {    server 10.0.0.5:80 weight=5;    server 10.0.0.6:80 weight=5;}

站点下健康检查文件:check.htmlok五、效果正常状态效果:http://s3.51cto.com/wyfs02/M02/6D/B8/wKioL1VqrMqQQ_R-AAUXeGAKVhU542.jpg报警效果节点故障条目变红,并且有声音报警(也可以实现邮件、短信报警)http://s3.51cto.com/wyfs02/M02/6D/BD/wKiom1VqqzShouizAAUSDTZkFbk159.jpg
页: [1]
查看完整版本: 开发shell脚本检查Nginx实战分享