В продолжение предыдущей статьи Nagios 3 – установка, настройка и эксплуатация хочется дополнить о настройке уведомлений событий используя sms оповещения.
Мобильный телефон или GSM модем должен быть подключен к компьютеру, где установлен Nagios. Для этого дела идеально подходят недорогие телефоны со шнурком USB присоединением к компьютеру, через USB происходит постоянная зарядка телефона.
Настройка gsmlib
Из приложений нам потребуется установить пакет gsmlib. Пакет можно скачать с сайта или установить из репозитория. Теперь можно подключить телефон и настроить его на работу с программой gsmlib.
Если вы не знаете как подключать телефон к компьютеру то обратитесь к статье О Gammu, Wammu, sms шлюзе и управление компьютером через смс. Часть 1., где описаны базовые принципы подключения на примере программы gammu.
На самом деле можно использовать любой пакет gsm, который умеет рассылать смс. Я рекомендую рассылать смс от Nagios с помощью демона смс, это правильнее чем для каждого смс сообщения выполнять команду “послать смс”.
Для проверки отсылки смс наберите команду от root или sudo (имя порта телефона и номер телефона подставьте свои)
#gsmsendsms -d /dev/ttyUSB0 +79211234567 Text
Такой способ рассылки смс не очень предпочтителен для Nagios, т.к. если произойдет много событий, то есть вероятность что команда рассылки зависнет при их обработки из очереди (у меня такое случалось).
Я рекомендую следующий способ: в составе пакета gsmlib есть демон gsmsmsd, который умеет следить за определенным каталогом – пулом смс. Как только в этом каталоге появится текстовый файл с любым именем, содержащий в теле
+xxxxxxxxxx
Text sms
где, +xxxxxxxxxx номер телефона, то будет отправлен текст смс на этот номер, а само сообщение удалено из пула. Проверка показала, что даже с большим количесвом смс в пуле демон справляется ну ура и шлет смс как из пулемета 🙂 Еще один плюс такого способа – это возможность использовать одновременно с Nagios и другие программы для отправки смс, достаточно только сгенерировать правильное текстовое сообщение и положить его в пул.
Создаем пул каталог – /var/spool/sms и запускаем демон от root или sudo используя свой порт телефона.
#gsmsmsd -d /dev/ttyUSB0 -b 9600 -s /var/spool/sms &
В завершение настройки напишем маленький скриптик, который будет вызывать Nagios3 для создания смс с уникальными названиями файлов и формированием правильного содержания смс
#!/bin/sh
unique=$$-`date "+%S"`
echo $1 > /var/spool/sms/$unique #первая строка номер телефона
echo $2|head -c 158 >> /var/spool/sms/$unique #вторая строка 158 символов сообщения
Скриптик я назвал sms_spool, а протестировать его работу можно командой от root или sudo
#sms_spool +792112345678 'Text sms'
После этой команды должен отработать демон gsmsmsd, отослать смс и очистить очередь пула.
Настройка Nagios 3
Прописываем команды отсылки смс для хоста и сервиса в файле commands.cfg. Путь до скрипта sms_spool пишите свой.
Команды разделенные “\” пишутся в одну строку!
define command{
command_name notify-by-sms
command_line /usr/local/bin/sms_spool $CONTACTPAGER$ '$NOTIFICATIONTYPE$: \
$HOSTNAME$($HOSTADDRESS$): $SERVICEDESC$ is $SERVICESTATE$ ($HOSTOUTPUT$) Time: $SHORTDATETIME$'
}
define command{
command_name host-notify-by-sms
command_line /usr/local/bin/sms_spool $CONTACTPAGER$ '$NOTIFICATIONTYPE$: \
$HOSTNAME$($HOSTADDRESS$) is $HOSTSTATE$ ($HOSTOUTPUT$) Time: $SHORTDATETIME$'
}
Правим файл contacts.cfg, добавляем в контакты строки. У меня показан пример если требуется отсылать уведомления и через электронную почту и через sms.
В переменную pager записываем номер телефона.
service_notification_commands notify-service-by-email,notify-by-sms
host_notification_commands notify-host-by-email,host-notify-by-sms
pager +79211234567
Перезапускаем Nagios и для проверки что-нибудь выключаем 🙂 Не забываем включить запуск демона пула смс в автозагрузку компьютера. Удачи!
Статья отличная, сделал как написано, всё получилось. Но так как во FreeBsd познаю только азы, включить запуск демона пула смс в автозагрузку компьютера я не смог. Что для этого необходимо?
во FreeBSD скрипты могут запускаться из папки /usr/local/etc/rc.d/
Положите туда файл запуска скрипта примерно такого содержания (обязательно дать права скрипту на выполнение). Конечно впишите запуск и остановку того что надо.
#!/bin/sh -
case "$1" in
start)
/usr/local/sbin/prog -d && echo -n " prog"
;;
stop)
kill `cat /var/run/prog.pid` && echo -n " prog"
;;
*)
echo "unknown option: $1 - should be "start" or "stop"" >&2
;;
esac
плюс почитайте статью http://samag.ru/archive/article/149
Хорошо, спасибо большое за подсказку. Допустим я сделал скрипт такого содержания
#!/bin/sh
case “$1” in
start)
gsmsmsd -d /dev/cuaU0.1 -b 9600 -s /var/spool/sms $
;;
stop)
kill gsmsmsd.pid’
;;
*)
echo “unknown option: $1 – should be “start” or “stop”” >&2
;;
esac
, но у меня все не стартует автоматически. Проблема в моем скрипте или где-то еще?(расположение /usr/local/etc/rc.d/, сделал исполняемым как http://docs.freebsd.org/doc/4.10-RELEASE/usr/share/doc/ru/books/handbook/configtuning-starting-services.html)
А если после старта системы перейти в каталог /usr/local/etc/rc.d и сделать
./название скрипта start
стартует?ну и вообще в стартовых скриптах принято писать полный путь до команд запуска типа /usr/local/bin/gsmsmsd, а не как у вас
Стартовый скрипт пришел к такому виду:
#!/bin/sh
echo -n ‘ sms_pool.sh’
case “$1” in
start)
gsmsmsd -d /dev/cuaU0.1 -b 9600 -s /var/spool/sms &
;;
stop)
kill -9 `cat /var/run/gsmsmsd.pid`
;;
*)
echo “Usage: `basename $0` {start|stop}” >&2
exit 64
;;
esac
exit 0
скрипт стал запускаться вручную, запускать демон но через секунд 20 служба отключатся и в консоли появляется ошибка: gsmsmsd[ERROR]: ME/TA error ‘unknown error’ (code 500).
Чуть позже попробую последовать вашему совету, пропишу полный путь.
В общем надо понять почему потом происходит сбой. Может в логах системы что-то есть. Когда скрипт будет работать после ручного запуска, то прописать полный путь до команды и посмотреть при старте системы.