Я хотел бы рассказать о небольшой доработке системы мониторинга 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 бодро определяет его:
Bus 003 Device 002: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Однако система видит модем как USB CD-ROM. Логично, ибо в этом режиме модем работает по умолчанию, чтобы с него же поставить под виндами дрова и управляющую программу, которая и переводит его в режим модема. Здесь нам на помощь придет пакет usb-modeswirch. Устанавливаем его и выполняем команду:
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_portn";
$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.
Автор: Vengant