1 - 実際のシェルプログラミング警報システム

要件:パーソナライズされたカスタムシェルのアラートツールの様々なを使用しますが、統合管理、標準化された管理が必要です。

          私たちのマシンの役割は変化しますが、すべてのマシンが同じ監視システム上で展開されるように、また、すべてのマシンに関係なくどのような役割、全体のフレームワークは同じではないことを言った、違いは異なる役割、さまざまなカスタマイズ構成に応じてということですファイル。

1.アイデアは:メインプログラム、サブルーチン、設定ファイル、電子メールエンジン、出力ログを含むスクリプトのパッケージを指定します

               メインプログラム:入り口として、スクリプト全体は、システム全体の生命線であります

               プロファイル:コントロールセンター、各スイッチ定義モニタリングサブルーチン;およびそれぞれの関連するアプリケーション・ログ・ファイルを指定します。

              サブルーチン:これは様々な指標を監視するために使用される実際の監視スクリプトです。

              スパムエンジンは:メールサーバー、メール男と送信者のパスワードを定義することができるのpythonプログラムによって実現されます

              出力ログ:監視システムは、ログ出力を持っている必要があります。デバッグとトラブルシューティングに簡単に

2.手続きのフレームワーク

     

  • ビンは、メインプログラムであります
  • confの下では、設定ファイルであります
  • 株式は、様々なモニタリング・サブスクリプトの下にあります
  • メールの下スパムエンジンであります
  • ログの下にログです。

3.プログラム

 1)ビン/ main.sh

#!/ binに/ bashの

#は、メッセージに送信するかどうかを切り替えて
エクスポートを1 =送信します。
フィルタリング#IPアドレス
のエクスポートADDR = `の/ sbin / ifconfigコマンド| grepの-A1" eth0の「| awkの-F '[:] +'。 '/のinet / 4} {印刷$'`
最後に、ディレクトリ名のみ、
DIR = `pwd`は
last_dir DIR =`エコー$ | '/' '{印刷$' `} NFのawkの-F

#以下の判決の目的は、私たちがbinディレクトリにスクリプトを実行、またはスクリプトを監視し、ログメッセージはそう見つからないことを確実にするためである
場合、[$ last_dir ==「ビン」 ] || [$ last_dir ==「ビン/ "];その後、
conf_file =" ../のconf / mon.conf "
他の
あなたはDIR shoudエコー" CDビン"
出口
Fiの

../ログ1 >>エグゼクティブ/ 2 >> ../ mon.logログ/ err.logの
#サブ実行監視負荷シェル
エコー"DATE +` "%F.%T" `負荷平均"
/ binに/ bashの。 ./shares/load.sh

#Webサーバの監視サブシェル502を実行
コンフィギュレーションファイルは502を監視する必要があるかどうかを確認するために##
IFはgrepの-q「to_mon_502 = 1」$のconf_file;そして
、グローバル変数として、パスmon.confにディレクトリをログ502を呼び出す##サブシェルを呼び出すことができる
のawk -F '=' 'プリント$ {2} |輸出ログイン= `grepの'ログファイル=' $のconf_file' | sedの「S / // g'`
/ binに/ bashの../shares/502。 SHの
Fiの

 2)研究会/ mon.conf

#define MySQLサーバのアドレス、ポート、およびユーザー、パスワード
to_mon_cdb 0または## = 0.1、0,0は監視しませデフォルト・モニター。1
db_ip = 10.20.3.13
DB_PORT = 3315
DB_USER =ユーザ名
passwdのDB_PASS =

#からhttpdモニタが監視していない場合は0
to_mon_httpd = 0

#PHPの
to_mon_php_socket = 0

#Http_code_502アクセスログ・パスを定義
to_mon_502 = 0
ログファイル= /データ/ログ/ xxx.xxx.com /のaccess.log

#たrequest_count規定された経路、及び対数領域
to_mon_request_count = 0
req_log = /データ/ログ/ www.discuz.net /のaccess.log
DOMAINNAME = www.discuz.net

3)メール/ mail.sh

= $ 1#mail.sh最初のパラメータログ
T_Sに= `日付+%S`
時間をタイムスタンプ#はちょうど3600 -gt $ Vを満たすために、2時間を定義する前に、メールを送信することができ、mail.shすなわちと呼ばれます
t_s2 = `日付は"2時間-d +%S`前に"

if [ ! -f /tmp/$log ]
then
echo $t_s2 > /tmp/$log
fi
# 第一次使用2个小时之前的时间戳,第二次使用刚刚执行mail.sh时的时间戳
t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
echo $t_s>>/tmp/$log

v=$[$t_s-$t_s2]
echo $v
# 1个小时之内,执行else后面的语句,告警超过10次,发送邮件,计数器清零
if [ $v -gt 3600 ]
then
./mail.py $1 $2 $3
echo "0" > /tmp/$log.txt #如果存在,必须清空该文件的内容,并写入计数器的初始值0
else
if [ ! -f /tmp/$log.txt ]
then
echo "0" > /tmp/$log.txt
fi
nu=`cat /tmp/$log.txt`
nu2=$[$nu+1]
echo $nu2>/tmp/$log.txt
if [ $nu2 -gt 10 ]
then
./mail.py $1 "trouble continue 10 min $2" "$3"
echo "0" > /tmp/$log.txt
fi
fi

4)shares/load.sh

#! /bin/bash

load=`uptime |awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/ //g' |cut -d. -f1`
if [ $load -gt 10 ] && [ $send -eq "1" ]
then
echo "$addr `date +%T` load is $load" >../log/load.tmp
/bin/bash ../mail/mail.sh [email protected] "$addr\_load:$load" `cat ../log/load.tmp`
fi
echo "`date +%T` load is $load"

5)shares/502.sh

#! /bin/bash

d=`date -d "-1 min" +%H:%M`
c_502=`grep :$d: $log|grep '502'|wc -l`
if [ $c_502 -gt 10 ] && [ $send == 1 ]; then
echo "$addr $d 502 count is $c_502">../log/502.tmp
/bin/bash ../mail/mail.sh $addr\_502 $c_502 ../log/502.tmp
fi
echo "`date +%T` 502 $c_502"

おすすめ

転載: www.cnblogs.com/tanzhirong/p/11415583.html