четверг, 22 сентября 2011 г.

Монитор доступности серверов в сети


Есть в сети несколько серверов/компьютеров, которые должны быть доступны всегда.
Если они вдруг не доступны, нужно сразу же сообщить об этом.

Для начала разберемся, как отправлять сообщение в jabber

echo "hello from `hostname`" | /usr/bin/sendxmpp -t -u mail@jabber.company -p PaSSWorD /
-s testmessage admin@jabber.company
Где:
-t - указываем использовать SSL соединения
-u mail@jabber.company - JID пользователя
-p PassWorD - это пароль пользователя
-t testmessage - тема сообщения
admin@jabber.company - JID получателя

Взято с http://silinio.webhost.ru/sendxmpp-notify.html


Ну а теперь скрипт который мониторит доступность серверов, и в случае не доступности, шлет сообщение в jabber.
Jabber сервер установлен и настроен.
#!/bin/bash
for i in 192.168.1.1 192.168.1.105;
do
    if eval "ping -c 2 $i"; then
        file="/home/name/scripts/pingserv/pingd/file`echo $i`"
        if [ -e $file ]; then
           rm "/home/name/scripts/pingserv/pingd/file`echo $i`"
           echo "`date` SERVER `echo $i` Is Work =)" | sendxmpp -d -s "Server `echo $i` Work =)" username@jabber > /dev/null 2>&1
        fi
    echo "11" > /dev/null
    else
        file="/home/name/scripts/pingserv/pingd/file`echo $i`"
        if [ -e $file ]; then
          echo "11" > /dev/null
        else
          echo "$i" > /home/name/scripts/pingserv/pingd/ping.log
          echo "`date` SERVER `echo $i` NOT Work!!" | sendxmpp -d -s "Allarm!!! `echo $i` DOWN!!!!" username@jabber > /dev/null 2>&1
          touch "/home/name/scripts/pingserv/pingd/file`echo $i`"
        fi
    fi
done
Засунуть этот скрипт в CRON, и каждые 10 минут запускать.
*/10 * * * * /home/name/scripts/pingserv/pingip > /dev/null 2>&1
Общая идея - пинг серверов, если какой то не доступен, сообщить в jabber.
создать файл c ip сервера, чтобы при следующем пинге, если сервер все еще не доступен, не отсылать повторное сообщение.
Если сервер стал доступен, удалить этот файл и сообщить о доступности сервера.


Другая реализация, проверять доступность интернета. Если интернет не доступен, сообщить, и создать файл-маркер, существование которого значит что интернет не доступен.
При следующей проверке доступности, проверить, если сервер все еще не доступен, и файл еще не удален. запустить скрипт, перезагрузки модема.


#!/bin/bash
if eval "ping -c 2 yandex.ru"; then
        file="/home/name/scripts/pingserv/pingd/yandex"
        if [ -e $file ]; then
           rm "/home/name/scripts/pingserv/pingd/yandex"
           echo "Internet UP =)" | sendxmpp -d -s "Internet" username@jabber #> /dev/null 2>&1
        else
            echo "11" > /dev/null
        fi
    else
        file="/home/name/scripts/pingserv/pingd/yandex"
        if [ -e $file ]; then
          /home/name/scripts/modem
          echo "`date` Modem REBOOT" | sendxmpp -d -s "Modem reboot" alexey@ermolino #> /dev/null 2>&1
        else
          echo "Internet DOWN!" | sendxmpp -d -s "Internet" alexey@ermolino #> /dev/null 2>&1
          touch "/home/name/scripts/pingserv/pingd/yandex"
        fi
fi

Комментариев нет: