Скрипт мониторинга доступности портов в сети с уведомлением на email (bash)

от автора

Так уж вышло, что живем мы хоть и в продвинутой всякими технологиями стране, но стабильность интернет соединения для городов которые в дали от столицы это редкое явление. Долго выбирал всевозможные сервисы для профессионального мониторинга доступности оборудования в сети. У одних есть проверка только 80 порта веб-сервера, у других возможно проверить ключевое слово на странице, отправлять GET или POST запросы. Нашел сервис лучше других, есть там возможность проверить доступность ssh, но оплата зависит от количества запросов за определенный промежуток времени и естественно количество оборудования которое необходимо мониторить.

Но наткнулся на хороший скрипт Мониторинг портов с уведомлением сисадмина, естественно на хабре. Но как писал выше, стабильность нашего интернета давала некоторую неточность в определении доступности тех или иных серверов в глобальной сети, поэтому я несколько изменил и доработал предложенный скрипт.

— Скрипт начал отсылать не только письмо о недоступности порта, но и появлении его в сети.
— Скрипт присылает на почту письмо и записывает в лог время, количество ошибок при проверке и предыдущее состояние проверки.
— Скрипт присылает на почту письмо только в том случае, если было пять неудачных попыток соединения либо пять удачных после недоступности.
— Скрипт не присылает письмо если в месте расположения скрипта пропал интернет
— Скрипт можно запускать каждую минуту


 #!/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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *