Но наткнулся на хороший скрипт Мониторинг портов с уведомлением сисадмина, естественно на хабре. Но как писал выше, стабильность нашего интернета давала некоторую неточность в определении доступности тех или иных серверов в глобальной сети, поэтому я несколько изменил и доработал предложенный скрипт.
— Скрипт начал отсылать не только письмо о недоступности порта, но и появлении его в сети.
— Скрипт присылает на почту письмо и записывает в лог время, количество ошибок при проверке и предыдущее состояние проверки.
— Скрипт присылает на почту письмо только в том случае, если было пять неудачных попыток соединения либо пять удачных после недоступности.
— Скрипт не присылает письмо если в месте расположения скрипта пропал интернет
— Скрипт можно запускать каждую минуту
#!/bin/bash CATALOG="/share/Web/" NMAPCAT="/share/MD0_DATA/.qpkg/Optware/bin/" WC="/mnt/ext/usr/bin/" echo "Subject: Monitoring hosts sms" > "$CATALOG"mail echo "From: send_from@mail.ru" >> "$CATALOG"mail echo "To: send_to@mail.ru" >> "$CATALOG"mail echo "CC: copy_to@gmail.com" >> "$CATALOG"mail echo "" >> "$CATALOG"mail for i in 1 2 3 4 5 do for a in $(<"$CATALOG"servers); do "$NMAPCAT"nmap `echo $a | sed -e 's/:/ -p /'` | grep -q "/tcp *open " || echo $a; done >> "$CATALOG"serverlist_n; sleep 5; done "$WC"sort -u "$CATALOG"serverlist_n | /bin/uniq -u > "$CATALOG"serverlist if [[ $(cat "$CATALOG"serverlist_n | "$WC"wc -w) -ge 5 ]] then cat "$CATALOG"serverlist >> "$CATALOG"mail echo "" >> "$CATALOG"mail else echo "All OK" >> "$CATALOG"mail echo "" >> "$CATALOG"mail fi if [[ $(cat "$CATALOG"servers | "$WC"wc -w) -eq $(cat "$CATALOG"serverlist | "$WC"wc -w) ]] then echo "" > "$CATALOG"serverlist_n fi a=`expr $(cat "$CATALOG"serverlist_n | "$WC"wc -w) % 5` b=`expr $(cat "$CATALOG"serverlist_old | "$WC"wc -w) % 5` if [[ $(cat "$CATALOG"serverlist_old | "$WC"wc -w) -ne $(cat "$CATALOG"serverlist_n | "$WC"wc -w) && $a -eq 0 && $b -eq 0 ]] then cat "$CATALOG"serverlist_n | "$WC"wc -w >> "$CATALOG"mail cat "$CATALOG"serverlist_old | "$WC"wc -w >> "$CATALOG"mail cat "$CATALOG"mail | sendmail -t echo "------------" >> "$CATALOG"log DATENOW=$(date +%d-%m-%Y_%T) echo $DATENOW >> "$CATALOG"log cat "$CATALOG"serverlist >> "$CATALOG"log cat "$CATALOG"serverlist_n | "$WC"wc -w >> "$CATALOG"log cat "$CATALOG"serverlist_old | "$WC"wc -w >> "$CATALOG"log echo "------------" >> "$CATALOG"log fi if [[ $a -eq 0 ]] then cat "$CATALOG"serverlist_n > "$CATALOG"serverlist_old fi echo "" > "$CATALOG"serverlist_n exit fi
CATALOG="/share/Web/" — Указать каталог где находится данный скрипт
NMAPCAT="/share/MD0_DATA/.qpkg/Optware/bin/" — Указать при необходимости расположение nmap
WC="/mnt/ext/usr/bin/" — Путь к приложению wc
Содержание файла servers такое:
192.168.1.1:80 192.168.1.2:25 192.168.1.3:110
В log получаем записи:
------------ 29-12-2013_12:42:41 192.168.1.1:80 5 0 ------------ ------------ 29-12-2013_12:58:19 192.168.1.1:80 192.168.1.2:25 10 5 ------------
Хотелось бы добавить о возможности мониторинга и на sms.
Пользуясь в основном почтой mail.ru, настроил фильтр на прием писем так, что если в теме содержится слово sms, то такое письмо помечается красным флажком в списке писем папки Входящие, а копия отправляется на телефон в виде смс по адресу 38068594xxx2@sms.kyivstar.net.
В тарифе Киевстар (Beeline UA) возможно получение 150 sms и 50 mms ежемесячно за 7 копеек сутки.
Скрипт мониторинга можно запускать по cron на роутере, спутниковом ресивере под управлением ОС Linux или на NAS накопителе. В данном случае скрипт запущен на NAS накопителе QNAP TS-419PII
В итоге получаем ежеминутный мониторинг всех ваших серверов почти даром.
В отступлении хочу написать, если уже подключен сервис «Получение SMS/MMS с e-mail» в сети Киевстар, можно также создать фильтр по слову mms в теме письма и получать сообщения общим объемом до 1 Мб без платы отправителя за mms.
Это мой первый скрипт на bash, который я в течении недели много раз переделывал. Надеюсь на конструктивную критику и Ваши комментарии.
ссылка на оригинал статьи http://habrahabr.ru/post/208116/
Добавить комментарий