2. 监控nginx服务器502状态码

相信运维过Nginx+php-fpm+MySQL网站的朋友一定遇到502问题,发生502问题的原因有很多种,而最常见的是由于php-fpm资源耗完导致。

而本案例要监控这台服务器就是这种情况,平时一直都很好,但若网站访问量很高,就会有502的状态码出现。发生502的问题时,需要及时分析php-fpm资源耗尽的原因,所以要做一个监控脚本,当有502状态码时第一时间邮件告警通知我们。

具体要求如下:

1)脚本一分钟执行一次;

2)监控502状态可以通过分析网站的访问日志,也可以通过curl工具发起http请求来获取状态码。建议通过分析访问日志,假如访问日志路径为 /data/logs/access.log ;

3)一分钟内出现502的次数超过50次则需要告警;

4)告警需要发邮件通知,通知邮箱为[email protected]

说到需要邮件来告警,这就要用python写一个邮件脚本来发邮件。下面是python代码:

#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mine.text import MIMEText
import sys
mail_host = 'stmp.163.com'
mail_user = '[email protected]'
mail_pass = 'your_mail_password'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
    me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content,'plain','utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib:SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False
if __name__ == "__main__"
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

说明:该脚本会调用第三方的邮箱账户,需要填写正确的mail_host,mail_user及mail_pass。假如该脚本名字为 mail.py ,则发邮件的命令为:

python mail.py [email protected] "邮件主题" "邮件内容"

参考脚本如下:

vim /usr/local/sbin/mon_502.sh
#!/bin/bash
##该脚本用来监控网站的502问题

t=`date -d "-1 min" +"%Y:%H:%M:[0-5][0-9]"
log="/data/logs/access.log"

#假设mail.py已经写好,并放在/usr/local/sbin/下

mail_script="/usr/local/sbin/mail.py"
mail_user=[email protected]

n=`grep $t $log |grep -c "502"`
if [ $n -gt 50 ]
then
    python $mail_script $mail_user "网站有502" "1分钟内出现了$n次"
fi

增加计划任务:

* * * * * /bin/bash /usr/local/sbin/mon_502.sh 2>/tmp/mon_502.err

说明:需要在该cron最后面定义一个错误日志输出,如果脚本执行过程中有报错,可以到 /tmp/mon_502.err 文件中查看错误信息。


猜你喜欢

转载自blog.csdn.net/miss1181248983/article/details/85844608