Мониторинг сайтов на коленке (bash script)


По роду деятельности мне приходится иметь дело с большим количеством сайтов. В виду специфики проектов приходится некоторое время следить за доступностью вэб ресурсов после окончания проекта.

Пришла мне мысль упростить это дело. Возиться с Nagios или Zabbix, ради такой простой задачи, не хотелось. В итоге получился вот такой вот скрипт, который выполняется на моем компьютере:

#/bin/bash
html=/var/www/servers_state.html
while true
do
    echo "<br><br><br>" > $html
    echo '<center><table width="40%" border="1" cellspacing="0" cellpadding="5" >' >> $html
    echo "<tr><td></td><td><b>HOST</b></td><td><b>State</b></td></tr>" >> $html
    i=1
    serverlist=(website1.com website2.com website3.com website4.com website4.com)
    for web in "${serverlist[@]}"
    do
        state=$(HEAD -t 8 $web |sed -n 1p)
        echo "<tr><td>$i</td><td>$ip</td><td>$state</td></tr>" >> $html
        if [ "$state" != "200 OK" ]
        then
            echo "Something is wrong with $ip" |mail -s "Invalid responce from $web" \ yourmail@domain.com
        fi
    let "i = $i +1"
done
echo "</table>" >> $html
echo "<br>" >> $html
echo "<p>Last updated at $(date +%H:%M:%S)</p>" >> $html
echo "</center>" >> $html
sleep 30
done

Переменная serverlist содержит список сайтов, которые нужно проверять.
Скрипт каждые 30 секунд бросает HEAD запрос каждому сайту из списка serverlist и проверяет код ответа. Вся эта информация записывается в файл servers_state.html. Если код ответа отличается от "200" - скрипт шлет уведомление мне на почту.
В итоге я имею табличку с состоянием сайтов на момент предыдущей прогонки скрипта по адресу

http://localhost/servers_state.html

А в почте имею информацию о недоступности ресурсов с точностью до 30 секунд.

На самом деле схему уведомления я немного упростил. На практике уведомления можно отправлять не на почту, а, скажем, в Skype.

Share Button
(Visited 133 times, 2 visits today)

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.