Настройка SMS-оповещений в Nagios

Появилась потребность получать от Nagios уведомления не только в почту, но и по смс. USB-свистки сейчас стоят копейки, отправлять смс обучены, ну а тариф с нужным пакетом смс не стоит неприличных денег. Основным средством оповещения по прежнему остается почта, но вот о каких-то глобальных авариях хотелось бы получать уведомления независимо от работы собственной сети и аплинков.

Подключение свистка – тема для отдельного поста, а здесь рассмотрю именно настройку оповещений.


Итак, перво-наперво, нам нужно подключить свисток и научиться с ним работать. Для этого понадобятся две программы. Первая переключит свисток в режим модема (изначально он определяется как флешка или виртуальный диск, на который записываются драйвера и операторский софт).

sudo apt-get install usb-modeswitch usb-modeswitch-data

После чего вставляем наш свисток. В логах должно появиться что-то вроде этого:

admin@monitor:~$ cat /var/log/messages | grep usb
Jun  1 19:35:03 monitor kernel: [246333.793109] usb 1-1: new full speed USB device using usb-vhci-driver and address 4
Jun  1 19:35:03 monitor kernel: [246334.250611] usb 1-1: New USB device found, idVendor=12d1, idProduct=1003
Jun  1 19:35:03 monitor kernel: [246334.250617] usb 1-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0
Jun  1 19:35:03 monitor kernel: [246334.250621] usb 1-1: Product: HUAWEI Mobile
Jun  1 19:35:03 monitor kernel: [246334.250624] usb 1-1: Manufacturer: HUAWEI Technology
Jun  1 19:35:03 monitor kernel: [246334.250781] usb 1-1: configuration #1 chosen from 1 choice
Jun  1 19:35:04 monitor kernel: [246334.466338] usbcore: registered new interface driver usbserial
Jun  1 19:35:04 monitor kernel: [246334.466425] usbcore: registered new interface driver usbserial_generic
Jun  1 19:35:04 monitor kernel: [246334.466434] usbserial: USB Serial Driver core
Jun  1 19:35:04 monitor kernel: [246334.491565] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
Jun  1 19:35:04 monitor kernel: [246334.491654] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
Jun  1 19:35:04 monitor kernel: [246334.491801] usbcore: registered new interface driver option

Теперь модем видится как /dev/ttyUSB0 и готово к использованию. Если что-то пошло не так, то можно попробовать указать программе ID устройства вручную. Там же, в логах, ищем строчку, которая появляется при подключении устройства:

usb 1-1: New USB device found, idVendor=12d1, idProduct=1446

Далее идем в /etc/usb_modeswitch.d и создаем файлик вида “idVendor:idProduct”, т.е. в нашем случае файл будет называться “12d1:1446”.
Содержимое файла будет выглядеть следующим образом:

# Huawei E270+  (HSPA+ modem)
   DefaultVendor= 0x12d1
   DefaultProduct=0x1446

   TargetVendor=  0x12d1
   TargetProductList="1001,1406,140c,14ac"

   CheckSuccess=20

   MessageContent="55534243123456780000000000000011060000000000000000000000000000"

Разумеется, DefaultVendor и DefaultProduct надо подставить свои. Вытаскиваем-вставляем свисток, проверяем, что устройство /dev/ttyUSB0 в системе появилось.

Теперь ставим вторую программу, которая будет отправлять смс.

sudo apt-get install gnokii

Создаем конфиг-файл:

sudo mkdir /etc/gnokii
sudo nano /etc/gnokii/e1550

Содержимое файла:

[global]
        model = AT
        connection = serial
        port = /dev/ttyUSB0

Этого, в общем, достаточно для работы модема. Проверяем:

sudo gnokii --config /etc/gnokii/e160g --identify

Результат будет примерно таким:

GNOKII Version 0.6.30
IMEI         : 359xxxxxxx087
Manufacturer : huawei
No flags section in the config file.
Model        : E1550
Product name : E1550
Revision     : 11.608.12.10.209

Теперь нужно написать скрипт, который бы принимал текст сообщения от Нагиоса и отправлял его в модем. Скрипт будет получать два аргумента от Nagios, первый – имя хоста и его состояние, второй – номер получателя.

sudo nano /usr/bin/gpsend

Вставляем:

#!/bin/sh
CONFIG="/etc/gnokii/e160g"
PIN=6523
echo "$PIN" | /usr/bin/gnokii --entersecuritycode PIN
echo "$1" | /usr/bin/sudo /usr/bin/gnokii --config="${CONFIG}" --sendsms "$2" >>/dev/null 

Даём права на исполнение:

sudo chmod +x /usr/bin/gpsend

Чтобы для sudo не требовался пароль, прописываем бинарник в sudoers.

sudo visudo

ALL ALL=(ALL) NOPASSWD:/usr/bin/gnokii

Это, конечно, определенная дырка в безопасности, но учитывая что сервер находится глубоко внутри сети, то можно обойтись без паранойи.
Разумеется, пользоваться им может не только Nagios, но и любая другая программа. Формат “gn_sendsms hello ‘+79211112233’.

Настроим Nagios:

sudo nano /etc/nagios3/command.cfg
define command{
        command_name    sms
        command_line    /usr/bin/gpsend $HOSTNAME$-$HOSTSTATE$ $CONTACTPAGER$
        }

Так же определим контакт, которому будут отсылаться сообщения. Можно ему же указать и е-мейл, и уведомлять не только по смс, но и по почте.

define contact{
              contact_name                         Snake
              alias                                Snake
              service_notification_period          24x7
              host_notification_period             24x7
              service_notification_options         w,u,c,r
              host_notification_options            d,u,r
              service_notification_commands        sms
              host_notification_commands           sms
              email                                nix@khd.ru
              pager                                +79211112233
         }

Перезапускаем Nagios:

sudo service nagios3 reload

На этом все, уведомления настроены.

Скрипт честно стырил у камрада SvM.

Leave a Reply