Простой мониторинг на Bash + оповещение на email

baltun

Администратор
Сообщения
10.870
Реакции
2.584
Баллы
2.003
Если системному администратору linux нужно мониторить свои машины в локальной сети и получать критические сообщения по email, то необязательно поднимать всякие Zabbix и Nagios, а вот использовать простые доступные средства вполне можно, тем более это намного легче, чем настроить триггеры в том же Zabbix.

Итак, что нам, собственно, нужно от простой системы мониторинга? Нам нужно:
  • мониторить по ping хосты
  • если хост недоступен стал вновь доступным, получать email оповещения
  • минимум потраченных нервов и средств
  • минимум из ПО
Как можно реализовать:
  • использовать bash для реализации мониторинга и оповещений
  • использовать команду ping для проверки доступности
  • использовать ssmtp (smtp-клиент, эмулирующий работу sendmail)
Исходные данные есть, начинаем реализовывать.

Наша система будет состоять из самого скрипта мониторинга (назовем его check_hosts), скрипта отправки email (назовем его send_alert), файла конфигурации с хостами для мониторинга (назовем его monit_hosts), файла-списка с email-адресами, куда отправлять оповещения (назовем его admin_emails).
Скрипт мониторинга
Код:
#!/bin/bash
# Начальные настройки
HOSTFILE="/etc/monit_hosts"
HOSTFILETMP="/tmp/monit_hosts.tmp"
ADMEMAILS="/etc/admin_emails"

cp $HOSTFILE $HOSTFILETMP
> $HOSTFILE

while read -r IP HOST STATUS
do

RESULT=`ping -c 5 $IP | grep ttl`
if [ "$RESULT" == "" ] && [ "$STATUS" == "1" ]; #если хост недоступен
then #отправляем email
/usr/bin/send_alert "$HOST упал" $ADMEMAILS
STATUS=0
elif [ "$RESULT" != "" ] && [ "$STATUS" == "0" ]; #если хост доступен
then #отправляем email
/usr/bin/send_alert "$HOST поднялся" $ADMEMAILS
STATUS=1
fi
echo "$IP $HOST $STATUS" >> $HOSTFILE
done <"$HOSTFILETMP"

rm $HOSTFILETMP
exit
В списке ip указываем каждый с новой строки

192.168.1.1

192.168.1.2
и т.п.

Скрипт отправки email
Код:
#!/bin/bash

#получаем дату и время в нужном формате
date_now="$(date +%d-%m-%Y %H:%M:%S)";

#адресат
to_email="$2";

#формируем хидер и отправляем нужному адресату
echo "To: $to_email
From: email_для_отправки@test.com
Subject: Админ, внимание!

ВНИМАНИЕ!
$date_now произошло следующее событие:
$1.

" | ssmtp -v -s $to_email
Замените "email_для_отправки@test.com" на ваш email, с которого будут отправляться оповещения. Он обязательно должен существовать. Далее настроим ssmtp на подключение к вашей почте.

Настройка SSMTP
Приведем файл /etc/ssmtp/ssmtp.conf к следующему виду:
Код:
root=postmaster
mailhub=mail
hostname=hostname_вашего_сервера
FromLineOverride=YES
AuthUser=имя_пользователя
AuthPass=пароль_от_почты
mailhub=smtp.yandex.ru:465
UseTLS=YES
Данные настройки показаны для использования Яндекс-почты для отправки оповещений. Если у тебя другая почта, то настройки будут другими, читай соответствующие маны по своему почтовому хостингу.

Список email
/etc/admin_emails имеет вид:
Код:
email1@test.com, email2.test.com
То есть email перечислены через запятую.

Кладем скрипты куда надо, даем права на исполнение, и пробуем. Легко и просто, не правда ли? Добавляем в crontab скрипт мониторинга на любое удобное время
 
Назад
Верх Низ