码迷,mamicode.com
首页 > 系统相关 > 详细

shell 练习(08)——Nginx 502 错误检查处理

时间:2018-12-07 11:46:50      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:设置   设定   题目   错误码   一个   脚本   etc   双引号   tmp   

1. 题目

服务器上跑的是 LNMP 环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是Nginx最普遍常见的错误状态码。由于502错误码只是暂时的,并且只要重启 php-fpm 服务则502消失,但不重启的话,则会一直持续很长一段时间。所以,有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下 php-fpm 服务。

设定:

1) Nginx 的 access_log 在 /data/logs/nginx/access.log

2) 脚本死循环,每10秒检测一次(假设每10秒中的日志条数为300左右)

3) 重启 php-fpm 的方法是 /etc/init.d/php-fpm restart

2. 题目分析

1) 判断是否出现502的状态码,有两种办法。第一种是通过 curl 访问网站,但是这种方法只能获取某一时刻的状态码,不能代表一个时段的状态码,所以并不合适。第二种方法是通过分析统计 Nginx 的日志。

2) 因为脚本要10s 检测一次,所以需要将10s 内产生的日志过滤出来,然后再统计502状态码出现的次数。题目中假设10s 内大概有300条日志,如果有10%的问题,就已经很严重了,所以我们暂定设置报警值为 10.

3. 脚本

#!/bin/bash 
log=/data/logs/nginx/access.log
N=10

while true:
do 
  tail -n 300 $log > /tmp/log
  N_502=`grep -c ‘502" ‘ /tmp/log`
  if [ $N_502 -ge $N ];then
    /etc/init.d/php-fpm restart 
    sleep 60
  fi
  sleep 10
done

4. 解释

1) 脚本开始,首先设定一个报警阀值 N=10。

2) while 死循环,每隔10s 检测一次。

3) 每次过滤300条日志,用覆盖的方式写入 /tmp/log 文件,保证每次都是新的日志。

4) 用 grep 统计502出现的次数,在脚本中要注意过滤的字符串是 ‘502" ‘,不仅有双引号,后面还有一个空格,这样是为了匹配得更精准。

5) 当统计的 502 错误码出现次数超过 N 时,则需要重启 php-fpm。重启之后,脚本休眠60s,以免脚本有严重的 bug,每10s 重启一次,必然会影响服务的稳定性。

shell 练习(08)——Nginx 502 错误检查处理

标签:设置   设定   题目   错误码   一个   脚本   etc   双引号   tmp   

原文地址:http://blog.51cto.com/hellocjq/2327378

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!