开发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="
$2$3$4$5" 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[2]}" == "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"
" sed -i "/C0C0C0/a $sum" $StatusHtml  #将sum语句插入html文件}# Defined Main Functionsfunction main(){ while true   do     check     html     sleep 5 done}main

三、相关文件

status.html.ori

Nginx http upstream check status
  
          
  
IndexUpstreamNameStatus      

status.html

Nginx http upstream check status
  
          
  
IndexUpstreamNameStatus
1dynamic_pools10.0.0.6:80up
2static_pools10.0.0.5:80up
3static_pools10.0.0.6:80up      

四、nginx.conf站点配置

worker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    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;            index  index.html index.htm;        }       location /p_w_picpath/ {         proxy_pass  http://static_pools;        include proxy.conf;       }       location /dynamic/ {        proxy_pass  http://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.html

ok

五、效果

正常状态效果:

报警效果节点故障条目变红,并且有声音报警(也可以实现邮件、短信报警)

谢谢大家!本文内容来自21期学员张耀!