3
Дек

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

Так уж вышло, что живем мы хоть и в продвинутой всякими технологиями стране, но стабильность интернет соединения для городов которые в дали от столицы это редкое явление. Долго выбирал всевозможные сервисы для профессионального мониторинга доступности оборудования в сети. У одних есть проверка только 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 > "$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
cat /dev/null > "$CATALOG"serverlist_n
exit 1
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
cat /dev/null > "$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.