会社のサービスのリモート監視の問題は、私にとって常に非常に深刻でした。 そして、私が試しなかったもの。 Nagios、Zenoss、Zabbixなどは互いに置き換えられ、それらの機能と機能セットが印象的でした。 彼らは、昼夜をスキャンし、カバーし、監視することを約束しました。 しかし、残念ながら、これらのコンバインを設定するのに十分な時間がないため、ここで監視する必要がありました。 それである日、私は座って次のスクリプトを書きました。
操作の原理は簡単です。 スクリプトは一定時間後に実行され、Telnetはリストからリソースに接続します。 3回の「応答なし」の後、SMSが送信されます。
労働条件:
プラットフォーム-Ubuntu 11.04(
他のバージョンのLinuxで動作する可能性が最も高い )。
アラートサービス-smstools(
そうでない場合は、sudo apt-get install smstools )。
USBケーブルで接続されたGSM電話。
リソースファイルビュー-ホストポート0
例えば
ya.ru 80 0
mail.ru 110 0スクリプトを備えたコンピューターは、別のプロバイダーを介してインターネット上で検索する必要があります。
私のスクリプトは、crontabから3分ごとに実行されます。
* / 3 * * * * '/ opt / portmonitor / telneter'
以下はコード自体です。 いつものように、厳密に判断しないでください、私たち自身はプログラマーではありません。
#!/bin/bash path=/opt/portmonitor/ logfile=/var/log/portmon fulltext=(`cat $path/ipbase.txt`) check=(`cat $path/count.txt`) rm $path/count.txt a=0 b=`expr $a + 1` e=`expr $b + 1` while [ ${fulltext[$a]} ] do send=(${fulltext[$a]}${fulltext[$b]}'not answer 3 time') elem=(\ ) ################subroutines#################################### bad (){ if [ -lt ];then zap[$i]=$elem ((check[$e]++)) #echo 'schetchik +:'${check[$e]} echo \ >>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` elif [ -eq ];then zap[$i]=$elem ((check[$e]++)) echo \ >>$path/count.txt gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx echo >>$logfile ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` else zap[$i]=$elem echo \ >>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` fi } good () { zap[$i]=$elem check[$e]=0 echo \ >>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` } #################endsubroutines#################################### nc -w2 -z ${fulltext[$a]} ${fulltext[$b]} && good || bad done
#!/bin/bash path=/opt/portmonitor/ logfile=/var/log/portmon fulltext=(`cat $path/ipbase.txt`) check=(`cat $path/count.txt`) rm $path/count.txt a=0 b=`expr $a + 1` e=`expr $b + 1` while [ ${fulltext[$a]} ] do send=(${fulltext[$a]}":"${fulltext[$b]}"-"'not answer 3 time') elem=("${fulltext[$a]}"\ "${fulltext[$b]}") ################subroutines#################################### bad (){ if [ "${check[$e]}" -lt "2" ];then zap[$i]=$elem ((check[$e]++)) #echo 'schetchik +:'${check[$e]} echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` elif [ "${check[$e]}" -eq "2" ];then zap[$i]=$elem ((check[$e]++)) echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send" gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send" gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send" echo "`date` $send" >>$logfile ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` else zap[$i]=$elem echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` fi } good () { zap[$i]=$elem check[$e]=0 echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt ((i++)) a=`expr $a + 3` b=`expr $b + 3` e=`expr $e + 3` } #################endsubroutines#################################### nc -w2 -z ${fulltext[$a]} ${fulltext[$b]} && good || bad done
誰かが双方向性を欠いている場合、画面に一種のモニターを表示できます。
cat /opt/portmonitor/count.txtを見る
そのような統計について取得する
単一のものは、これらのポートはリソースに使用できないと言います。