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

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 重启一次,必然会影响服务的稳定性。

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

时间: 2024-10-28 05:16:13

shell 练习(08)——Nginx 502 错误检查处理的相关文章

nginx 502 错误

今天帮朋友处理一个程序报错,重启nginx服务之后,发现首页打不开了,但是静态文件可以打开 经检查nginx 服务器正常运行,重启无数次仍然502错误,考虑到静态文件可以打开,怀疑可能是php 脚本程序没有正常运行,运势 ps -aux |grep php-fpm 没有相关进程,进一步产看网络链接状态 netstat -anpo |grep 9000 仍没有内容,可以断定是php-fpm问题,启动该进程,我的安装目录在usr/local/nginx/php/php-fpm ./sbin/php-

PHP脚本监控Nginx 502错误并自动重启php-fpm

服务器时不时出现Nginx 502 Bad Gateway,如果在电脑旁边还好,要是半夜或者出去了,怎么办? 没关系,写个脚本检测服务状态,发现异常,自动重启. 自动重启脚本: <?php $url = 'http://blog.rebill.info'; $cmd = '/usr/local/php/sbin/php-fpm restart'; for($i = 0; $i < 5; $i ++){ $exec = "curl connect-timeout 3 -I $url 2

nginx 502错误 failed (13: Permission denied)

安装好nginx和php-fpm后出现502的错误 查找原因是说php-fpm没有启动 ,但在我实际中这个进程是启动的 找了半天没找到原因,查看nginx日志后 发现以下错误 [crit] 2686#0: *1 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.50.1, server: [...], reque

nginx 502错误

[[email protected] nginx]# curl localhost/i.php <html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> <hr><center&

nginx 502错误 upstream sent too big header while reading response header from upstream

原本的设置是 proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; 在这种配置下,使用fiddler进行抓包分析,发现只要请求的header的尺寸大于4378字节的时候就报502,当header在4377及以下的时候就正常了. 将配置更改为: proxy_buffer_size 64k;   proxy_buffers   32 32k;   proxy_busy_buffers_size 128k; 之后

(总结)Nginx 502 Bad Gateway错误触发条件与解决方法

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现.以下是从Google搜集整理的一些Nginx 502错误的排查方法,供参考: Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的.这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在

nginx 502 Bad Gateway 错误解决办法

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现.以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考: Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的.这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx

nginx 502 Bad Gateway 错误问题收集

nginx 502 Bad Gateway 错误问题收集 (2010-11-18 13:51:37) 转载▼ 标签: 杂谈 分类: 工作 nginx 502 Bad Gateway 错误问题收集 因为,nginx和lighttpd的文档真的很少,更不用说中文文档了,所以收集一些和502有关的错误在这里,保留来源地址,建议看来源地址的内容. 502是FastCGI出现问题,所以从FastCGI配置入手. 1.请检查你的FastCGI进程是否启动 2.FastCGI进程不够使用请通过执行 netst

nginx 502 bad故障原因及解决方法收集

如题,最近网站频繁出现502错误,简直无法正常运转,出现这种情况大多是php-cgi超时没有返回信息,或进程僵死等情况造成的.我们的nginx已经配置到极致这些都已经老早做过修改了,但现在又出然出现. 经过分析将nginx的error log打开,发现”pstream sent too big header while reading response header from upstream”这样的错误提示,查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区