Я хотел бы рассказать о небольшой доработке системы мониторинга Mikrotik The Dude. Эта система ранее уже упоминалась хабраюзерами gsandul и cedr. Доработку, о которой пойдет речь, я когда-то описывал в своем блоге, но здесь ее сможет увидеть и оценить большее количество народа.
Итак, вкратце: The Dude — довольно мощная и гибкая система мониторинга сетевых устройств, поддерживающая различные типы проверок доступности сервисов и умеющая опрашивать устройства по SNMP. Она поддерживает два типа отправки сообщений о событиях во внешний мир: это e-mail и syslog.
Для оповещения админа по SMS о каких-либо алертах можно пойти традиционным способом — то есть через email-sms шлюз, но в этом случае есть вероятность, что при падении аплинка система до шлюза не достучится и сообщение отправлено не будет. У меня же в наличии были приблудившийся откуда-то 3G модем Huawei E220 от красно-белого оператора, корпоративная симка с условно-безлимитными SMS и собственно сама машина, на которой стояла The Dude — работала она через wine под Ubuntu.
Итак, подключаем модем к той же машине, на которой через wine работает Dude. Ubuntu бодро определяет его:
Однако система видит модем как USB CD-ROM. Логично, ибо в этом режиме модем работает по умолчанию, чтобы с него же поставить под виндами дрова и управляющую программу, которая и переводит его в режим модема. Здесь нам на помощь придет пакет usb-modeswitch. Устанавливаем его и выполняем команду:
После этого нужно отключить и снова подключить модем. Проверяем, что он переключился в нужный режим:
Если порты ttyUSB не появились, то нужно дополнительно выполнить команду:
Теперь все должно быть в порядке. Для работы с SMS сообщениями будем использовать gnokii. Устанавливаем, настраиваем:
Обязательно снимаем с SIM карты запрос PIN. Проверяем:
Итак, gnokii определяет модем и видит сеть. Пробуем отправить SMS:
Если SMS доставлена по назначению, то все работает. Переходим к настройке связки gnokii с The Dude. Она, как я уже говорил, умеет отправлять уведомления о событиях двумя способами: по e-mail либо через syslog. Как раз вторым способом мы и воспользуемся, благо можно задать любой внешний IP и любой порт, куда по протоколу UDP в открытом виде будут отсылаться уведомления. Наша задача – слушать порт, куда их будет отправлять The Dude, и передавать эти сообщения в gnokii. Для этого я написал небольшой скрипт на perl:
Как видно из кода, скрипт прослушивает порт 12345 и передает все приходящие в него сообщения не длиннее 160 знаков (максимальная длина SMS сообщения) в gnokii, указав номер мобильного, куда нужно их отправить.
В Dude создаем новое оповещение типа syslog, в качестве IP указываем IP-адрес машины, где подключен модем и запущен скрипт (в моем случае это один и тот же сервер), порт выбираем аналогичный указанному в скрипте.

Теперь нажимаем «Test». Если все сделано правильно, на указанный в скрипте номер придет тестовое сообщение от The Dude.

Update. Если материал вызовет интерес — опишу модификацию скрипта, позволяющую отправлять SMS уведомления через любой 3G модем, подключенный к Asterisk посредством chan_dongle.
Итак, вкратце: The Dude — довольно мощная и гибкая система мониторинга сетевых устройств, поддерживающая различные типы проверок доступности сервисов и умеющая опрашивать устройства по SNMP. Она поддерживает два типа отправки сообщений о событиях во внешний мир: это e-mail и syslog.
Для оповещения админа по SMS о каких-либо алертах можно пойти традиционным способом — то есть через email-sms шлюз, но в этом случае есть вероятность, что при падении аплинка система до шлюза не достучится и сообщение отправлено не будет. У меня же в наличии были приблудившийся откуда-то 3G модем Huawei E220 от красно-белого оператора, корпоративная симка с условно-безлимитными SMS и собственно сама машина, на которой стояла The Dude — работала она через wine под Ubuntu.
Итак, подключаем модем к той же машине, на которой через wine работает Dude. Ubuntu бодро определяет его:
Bus 003 Device 002: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Однако система видит модем как USB CD-ROM. Логично, ибо в этом режиме модем работает по умолчанию, чтобы с него же поставить под виндами дрова и управляющую программу, которая и переводит его в режим модема. Здесь нам на помощь придет пакет usb-modeswitch. Устанавливаем его и выполняем команду:
echo ‘SUBSYSTEM==»usb», SYSFS{idProduct}==»1003″, SYSFS{idVendor}==»12d1″, RUN+=»/lib/udev/modem-modeswitch –vendor 0x12d1 –product 0×1003 –type option-zerocd»‘ | sudo tee /etc/udev/rules.d/45-huawei220.rules
После этого нужно отключить и снова подключить модем. Проверяем, что он переключился в нужный режим:
~# ls -l /dev | grep ttyUSB lrwxrwxrwx 1 root root 7 2011-12-30 15:00 gsmmodem -> ttyUSB0 crw-rw—- 1 root dialout 188, 0 2011-12-31 15:09 ttyUSB0 crw-rw—- 1 root dialout 188, 1 2011-12-30 15:00 ttyUSB1
Если порты ttyUSB не появились, то нужно дополнительно выполнить команду:
~# modprobe usbserial vendor=0x12d1 product=0×1003
Теперь все должно быть в порядке. Для работы с SMS сообщениями будем использовать gnokii. Устанавливаем, настраиваем:
[global] port = /dev/ttyUSB0 model = AT initlength = default connection = serial use_locking = yes serial_baudrate = 115200
Обязательно снимаем с SIM карты запрос PIN. Проверяем:
~# gnokii --identify GNOKII Version 0.6.29 IMEI : *************** Manufacturer : huawei Model : E220 Product name : E220 Revision : 11.117.10.00.184 ~# gnokii --getnetworkinfo GNOKII Version 0.6.29 Network : MTS (Российская Федерация) Network code : 250 01 LAC : 0000 (0) Cell id : 00000000 (0)
Итак, gnokii определяет модем и видит сеть. Пробуем отправить SMS:
~# echo test | gnokii --sendsms +7********** GNOKII Version 0.6.29 Send succeeded with reference 40!
Если SMS доставлена по назначению, то все работает. Переходим к настройке связки gnokii с The Dude. Она, как я уже говорил, умеет отправлять уведомления о событиях двумя способами: по e-mail либо через syslog. Как раз вторым способом мы и воспользуемся, благо можно задать любой внешний IP и любой порт, куда по протоколу UDP в открытом виде будут отсылаться уведомления. Наша задача – слушать порт, куда их будет отправлять The Dude, и передавать эти сообщения в gnokii. Для этого я написал небольшой скрипт на perl:
#!/usr/bin/perl -w use strict; use IO::Socket; my($server, $newmsg, $max_len, $server_port); $max_len = 160; $server_port = 12345; $server = IO::Socket::INET->new(LocalPort=>$server_port, Broadcast=>0, Proto=>"udp") or die "Error starting UDP Server on port $server_port: $@\n"; print "UDP Server started on port $server_port\n"; $newmsg = ""; while($server->recv($newmsg,$max_len)){ if($newmsg){ #my($port, $ipaddr) = sockaddr_in($server->peername); print "Received: $newmsg \n"; open(GNOKII, "| gnokii --sendsms +7**********») || die "Starting gnokii failed: $!\n"; print GNOKII $newmsg; close(GNOKII); } } die "recv: $!";
Как видно из кода, скрипт прослушивает порт 12345 и передает все приходящие в него сообщения не длиннее 160 знаков (максимальная длина SMS сообщения) в gnokii, указав номер мобильного, куда нужно их отправить.
В Dude создаем новое оповещение типа syslog, в качестве IP указываем IP-адрес машины, где подключен модем и запущен скрипт (в моем случае это один и тот же сервер), порт выбираем аналогичный указанному в скрипте.

Теперь нажимаем «Test». Если все сделано правильно, на указанный в скрипте номер придет тестовое сообщение от The Dude.

Update. Если материал вызовет интерес — опишу модификацию скрипта, позволяющую отправлять SMS уведомления через любой 3G модем, подключенный к Asterisk посредством chan_dongle.