ケースII、nginxのサーバーは、ステータスコード502が存在するか否かを監視します

nginxの+ PHP-FPM + MySQLのWebサイトでは、502件の問題の原因は多くの理由があり、最も一般的なのは、資源の枯渇は、PHP-FPMにつながることによるものです。この場合、このサーバを監視するような状況は、通常、非常に良いされているが、高いサイトのトラフィック場合、コードが表示された502個の状態が存在します。502の問題は、枯渇のphp-FPM資源の原因のタイムリーな分析の必要性を発生するので、最初のアラームの時間が私たちを通知する際に、監視スクリプトを行い、502ステータスコードがあります。

次のような要件は以下のとおりです。

1)1分間のスクリプトの実行時間

2)アクセスログ分析サイトによって状態502を監視し、アクセスログパス/data/logs/access.log場合、としてセグメントを記録、ステータスコード、推奨されるアクセスログの解析を得る、カールツールHTTPリクエストを使用して開始することができます:

54.36.149.38  -  [16/9月/ 2018:18:21:10 0800] www.lishiming.net "スレッド5360-1-1.html" 301「GET /thread-5360-1-1.html HTTP / 1.1 " - " の "Mozilla / 5.0(互換; AhrefsBot / 5.2; + HTTP://ahrefs.com/robot/)"

3)1分間502は50倍以上必要なアラームを発生します

4)に電子メールアラート通知メールを送信する必要が[email protected]


知識ポイント1:タスクスケジューラのcron

この場合はそうcronを使用して、スクリプトを実行するために1分を必要とします。コマンドを実行します。

crontabの-e 
* * * * * / binに/ bashのを/usr/local/sbin/mon_502.sh

例1:

まず、水曜日と金曜日4:20毎週スクリプトを実行します

/usr/local/sbin/123.sh 
20 4 * * 1,3,5 / binに/ bashのを/usr/local/sbin/123.sh

例2:

空のファイルごとに3日

/data/log/tmp.log 
* * * / 3 * *真> /data/log/tmp.log

例3:

12:00、14:00まで毎日9時午前16時にスクリプトを実行します

/usr/local/sbin/xxx.sh  
0 9-12,14-16 * * * / binに/ bashの/usr/local/sbin/xxx.sh



知識ポイント2:フィルタリングのキーワード

このような本実施形態のように、シェルスクリプト、grepコマンドのキーワードを使用して、フィルタは、502を濾過ログを含むログする必要があり、コマンドは次のとおりです。

grepの '502' /data/log/access.log

1)文字で始まる行を濾過しました。

グレップ '^ [-ZA-Z]' 1.TXT

2)すべての空白行を削除します。

grep -v '^ $' 1.TXT

3)少なくとも2つの連続濾過行番号:

grep -E '[0-9] [0-9  ] +' 1.TXT 
または  
grepの-E '[0-9] {2 、$}' 1.TXT

:いくつかの行を含む4)、濾過エーミングまたはLinux

grepのEcの「私たちの| Linuxの1.TXT



このケースを求めて見て、検出時間が1分なので、キーワードは分、ログ解析、分でろ過されているため、利用できる見つけることができます:

日付-d "-1分" +%D /%M /%Y:%のH:%のM:[0-5] [0-9]

このキーワードが示されています。[0-5] [0-9]は59秒に一致しています。


知識ポイント3:シェル変数で

オブジェクトは数字を比較することではなく、場合、文字列ならば、あなたはこれを使用することができます。

[$ strの== "aminglinux"]の場合

変数STRの値はaminglinux時間になると。


知識ポイント4:コマンドラインからの電子メール

電子メールでのPythonスクリプトは、163個のメールボックスを使用して、サードパーティ製の電子メールを呼び出します。電話番号は、クライアントをインストールすることができますので、アラートを心配しないでください。トラブルがないということです、自分のメールについて、スパムので、受信メールは、あなた自身の人ですることができます。

メールPythonスクリプト:

mail.py

#!/bin/bash
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.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
     expect 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问题
##作者:
##日期:
##版本:v0.1
#[0-5][0-9]表示59秒内任何数字,就是前一分钟任何秒数的日志或文件。
t=`date -d "-1 min" +%d/%m/%Y:%H:%M:[0-5][0-9]`
log="/data/logs/access.log"
#假设mail.py已写好,并放在/usr/local/sbin/下
mail_script="/usr/local/sbin/mail.py"
[email protected]
n=`grep $t $log|grep -c "502"`
if [ $n -gt 50 ]
then
    python $mail_script $mail_user "网站有502" "一分钟内出现了$n次"
fi

增加任务计划:

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

说明:

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



おすすめ

転載: blog.51cto.com/13576245/2421158