开发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"
三、相关文件
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期学员张耀!