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

1 minute read

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

Пришла мне мысль упростить это дело. Возиться с 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" \ [email protected]
		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.