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="[email protected]" 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 протокол.