loremOS Admin

"Системное администрирование – это культура"

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

Опубликовано 4th Jun 2018 10:47:22 в категории Linux

Здравствуй, дорогой друг! Если системному администратору 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 скрипт мониторинга на любое удобное время


Поделиться:


Теги