zlmon (ZeroLab Monitor) - Мониторинг доступности серверов
Иногда стоит простая задача отслеживания доступности сервера в сети, но при этом разворачивать полноценные системы мониторинга может оказаться попросту нецелесообразно и долго.
Поэтому я написал небольшой shell-скрипт, решающий исключительно эту узкую задачу – zlmon (ZeroLab Monitor).
zlmon.sh:
#!/bin/bash
# --------------------------------------------
# zlmon (ZeroLab Monitor):
# Written by ZeroChaos
# Version 1.0, 2015-02-17
# Site: https://zerolab.net/
# --------------------------------------------
DIR=$(dirname "$0")
HOSTLIST=$DIR/hostlist.txt
SUBJECT="Alert: Host down!"
EMAIL="e@mail.net"
while read ADDRESS; do
if [ ! -f /tmp/zlmon-$ADDRESS ]; then
echo 0 > /tmp/zlmon-$ADDRESS
fi
COUNT=`head -1 /tmp/zlmon-$ADDRESS`
if ping -c 1 -s 1 -W 1 $ADDRESS; then
echo 0 > /tmp/zlmon-$ADDRESS
else
# Notify (no more than 5 times)
if [ $COUNT -lt 5 ]; then
echo -e "Connection Lost!\n\nHost: $ADDRESS\nTime: `date +'%Hh%Mm'`" | mail -s "$SUBJECT ($ADDRESS)" $EMAIL
fi
((COUNT++))
echo $COUNT > /tmp/zlmon-$ADDRESS
# Clear counter
if [ $COUNT -gt 60 ]; then
echo 0 > /tmp/zlmon-$ADDRESS
fi
fi
done < $HOSTLIST
Рядом со скриптом создаем файл hostlist.txt, содержащий адреса серверов, которые необходимо мониторить (это может быть как доменное имя, так и IP адрес):
msilab.net
zerolab.net
ruslab.net
[do not delete this string]
Добавляем скрипт в cron, запускать будем каждую минуту:
*/1 * * * * /usr/sh/zlmon/zlmon.sh
Не забудьте прописать свой 'EMAIL'. При недоступности сервера скрипт будет высылать уведомление на вашу почту, но не более 5 уведомлений подряд для недоступного сервера, после этого включается "mute" режим. В ином случае вашу почту просто засыпало бы однотипными уведомлениями. Через час счетчик сбрасывается и если сервер не стал доступен (сам, либо же вы его "подняли"), то вам снова начнут приходить уведомления.
Так как проверка проводится при помощи утилиты ping, не забывайте, у проверяемого на доступность сервера не должен "резаться" ICMP протокол.