Il problema è noto: lo strumento per il controllo di risorse e servizi Nagios viene in genere predisposto per inviare le notifiche attraverso messaggi di posta elettronica, ma cosa succede se l’anomalia riguarda proprio l’invio delle mail di notifica? Sul precedente articolo di Mia Mamma Usa Linux “Un Nagios parlante con Festival” è stata presentata una soluzione per fare in modo che un computer segnali i malfunzionamenti attraverso un sintetizzatore vocale e delle casse audio, ma se non si ha la disponibilità di un impianto audio o più semplicemente se la macchina che effettua i controlla risiede in una locazione diversa da quella in cui ci si trova (tipicamente un centro elaborazione dati) come ci si deve comportare?
Una soluzione percorribile è quella di utilizzare le notifiche SMS, che unite alle notifiche standard danno un’approssimativa certezza di ricevere da almeno una fonte la segnalazione di un guasto.
Quanto verrà presentato in questo articolo è nello specifico una soluzione che prevede l’integrazione di Nagios con la chiavetta modello ONDA MT503HS e più in generale una soluzione applicabile a tutte le chiavette USB attualmente sul mercato.
Cenni sul dispositivo
Ogni operatore di telefonia mobile possiede un’offerta che prevede una chiavetta USB funzionante come modem che permette la connessione GPRS/EDGE/UMTS/HSDPA all’operatore stesso e la conseguente navigazione in internet.
Questi tipi di pendrive generalmente hanno una peculiarità interessante, vengono definiti “flip-flop“, possono cioè essere usati in due modi: come dispositivo di archiviazione di massa (possiedono infatti uno slot per micro-sd) o come modem. A deciderne l’impiego è generalmente l’utente che una volta inserita la chiavetta si trova di fronte alla scelta attraverso un menu, quantomeno sui sistemi operativi Microsoft Windows, in quanto il driver viene letto ed installato partendo dai dati che si trovano sulla memoria flash del dispositivo.
Il motivo che rende questo dispositivo ideale per la realizzazione del progetto di notifiche SMS è che una volta posta la chiavetta in stato “modem”, questa risulta interrogabile con i comuni comandi AT, . Questa funzionalità permette quindi di utilizzare il modem per l’invio di SMS. Un altro indubbio vantaggio è quello dell’alimentazione: il dispositivo riceve l’energia necessaria attraverso i 5 volt della presa USB e non richiede pertanto un trasformatore.
Inoltre sebbene ogni chiavetta sia venduta da uno specifico operatore supporta SIM di qualsiasi tipo, pertanto se la pendrive è venduta dall’operatore Tim, è possibile comunque utilizzarla con una SIM dell’operatore Vodafone, e così via.
Tirando le somme si capisce come un computer con collegata una pendrive di questo tipo possa facilmente diventare un gateway sms, proprio quello che serve per realizzare il progetto descritto.
Il motivo per cui la pendrive scelta è il modello Onda MT503HS è puramente casuale, come si dice in questi casi era “quello che passava il convento“.
Requisiti preliminari ed essenziali
Prima di fare qualsiasi cosa, l’esperienza suggerisce di recarsi nel luogo dove dovrà risiedere la macchina su cui verrà installato Nagios, inserire la SIM che si vorrà usare per le notifiche in un telefonino e controllare quanto segnale c’è a disposizione. Una pendrive usb generalmente prende come un comune cellulare, nello stesso posto se quindi il cellulare ha campo, lo avrà anche la chiavetta.
L’esperienza inoltre insegna che si può costruire il miglior software per le notifiche possibile, testarlo in ogni modo ed orgogliosamente portarlo nel luogo dove risiederà convinti del corretto funzionamento per finire a tutta velocità contro il muro rappresentato dell’assenza di campo.
A seconda del luogo quindi è meglio capire quale sia il miglior operatore della zona, in modo da non incorrere in cocenti delusioni.
Configurazione della pendrive
La pendrive Onda MT503HS è venduta come compatibile con tutti i maggiori sistemi operativi: Windows, Linux e Mac OSx. Nella confezione è presente un CD contenente i driver di ogni sistema e se si usa Linux, almeno nel caso di Debian, questi driver non funzionano. Il pacchetto di installazione prevede la compilazione dei sorgenti del modulo relativo al dispositivo, ma l’esito delle operazioni di compilazione è sempre negativo.
Fortunatamente però Linux consente di ovviare al problema con i driver nativi e l’utilizzo di un programma, denominato usb_modeswitch che permette di forzare la scelta dell’impiego del dispositivo.
La procedura di installazione descritta è relativa a Debian Lenny, ma come sempre ci si può riferire al sito del progetto per recuperare i sorgenti o capire dove reperire i pacchetti binari per le più diffuse distribuzioni.
Il pacchetto è installabile attraverso apt-get:
$ apt-get install usb-modeswitch
oltre all’eseguibile /usr/sbin/usb_modeswitch i file necessari al corretto funzionamento del meccanismo di switch della periferica sono due:
/etc/usb_modeswitch.conf
Al cui interno vanno abilitate le righe relative al modello della pendrive. Cercando la parola chiave “ONDA MT503HS”, si trova la sezione in cui abilitare le righe rimuovendo i caratteri “;” iniziali:
########################################################
# ONDA MT503HS (most likely a ZTE model)
#
# Contributor: Lucio Asnaghi a.k.a. kRAkEn/gORe
DefaultVendor= 0x19d2
DefaultProduct= 0x2000
TargetVendor= 0x19d2
TargetProduct= 0x0002
MessageEndpoint=0x08
MessageContent="55534243b0c8dc812000000080000a85010101180101010101000000000000"
########################################################
/etc/udev/rules.d/usb_modeswitch.rules
Analogamente cercando la stringa relativa al modello “ONDA MT503HS”, va abilitata la regola udev che associa l’esecuzione del comando usb_modeswitch all’inserimento della periferica:
########################################################
# ONDA MT503HS (most likely a ZTE model)
#
# Contributor: Lucio Asnaghi a.k.a. kRAkEn/gORe
# Vendor:Product id = 0x19d2:0x2000
SUBSYSTEM=="usb", SYSFS{idVendor}=="19d2", SYSFS{idProduct}=="2000", RUN+="/usr/sbin/usb_modeswitch --DefaultVendor 0x19d2 --DefaultProduct 0x2000 --MessageEndpoint 0x08 --MessageContent 55534243b0c8dc812000000080000a85010101180101010101000000000000"
########################################################
E’ palese che a seconda del modello di pendrive in possesso corrisponderà un’abilitazione diversa all’interno dei suddetti file.
Terminate le modifiche è possibile inserire la pendrive nella porta USB, monitorando quanto viene scritto dal sistema all’interno del file /var/log/messages:
Jun 12 09:11:35 nagios kernel: [ 21.897954] usb 1-1: configuration #1 chosen from 1 choice
Jun 12 09:11:35 nagios kernel: [ 21.901706] scsi1 : SCSI emulation for USB Mass Storage devices
Jun 12 09:11:35 nagios kernel: [ 21.913128] usb 1-1: New USB device found, idVendor=19d2, idProduct=0002
Jun 12 09:11:35 nagios kernel: [ 21.913139] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 12 09:11:35 nagios kernel: [ 21.913148] usb 1-1: Product: ONDA CDMA Technologies MSM
Jun 12 09:11:35 nagios kernel: [ 21.913154] usb 1-1: Manufacturer: Qualcomm, Incorporated
Jun 12 09:11:35 nagios kernel: [ 21.913161] usb 1-1: SerialNumber: Data Interface
Jun 12 09:11:35 nagios kernel: [ 23.110641] usbcore: registered new interface driver usbserial
Jun 12 09:11:35 nagios kernel: [ 23.110682] usbserial: USB Serial support registered for generic
Jun 12 09:11:35 nagios kernel: [ 23.110789] usbcore: registered new interface driver usbserial_generic
Jun 12 09:11:35 nagios kernel: [ 23.110796] usbserial: USB Serial Driver core
Jun 12 09:11:35 nagios kernel: [ 23.133222] usbserial: USB Serial support registered for GSM modem (1-port)
Jun 12 09:11:35 nagios kernel: [ 23.133291] option 1-1:1.1: GSM modem (1-port) converter detected
Jun 12 09:11:35 nagios kernel: [ 23.133459] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
Jun 12 09:11:35 nagios kernel: [ 23.133496] option 1-1:1.2: GSM modem (1-port) converter detected
Jun 12 09:11:35 nagios kernel: [ 23.133578] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
Jun 12 09:11:35 nagios kernel: [ 23.133611] option 1-1:1.3: GSM modem (1-port) converter detected
Jun 12 09:11:35 nagios kernel: [ 23.133689] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Jun 12 09:11:35 nagios kernel: [ 23.133721] option 1-1:1.4: GSM modem (1-port) converter detected
Jun 12 09:11:35 nagios kernel: [ 23.133809] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
Jun 12 09:11:35 nagios kernel: [ 23.133841] option 1-1:1.5: GSM modem (1-port) converter detected
Jun 12 09:11:35 nagios kernel: [ 23.133923] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB4
Jun 12 09:11:35 nagios kernel: [ 23.133950] usbcore: registered new interface driver option
Jun 12 09:11:35 nagios kernel: [ 23.133957] option: USB Driver for GSM modems: v0.7.2
Dapprima il dispositivo viene riconosciuto come una periferica di archiviazione di massa e subito dopo subentra la regola udev che lo converte in una periferica ad accesso seriale utilizzando il modulo usbserial e creando i device ttyUSB tutti di tipo GSM Modem.
Il dispositivo di riferimento da utilizzare sarà ttyUSB1.
Spedire SMS dalla linea di comando
Tra i vari pacchetti disponibili per la gestione degli SMS in Linux, gsm-utils consente di gestire attraverso la linea di comando quanto necessario per l’invio di SMS. Il pacchetto è disponibile nelle maggiori distribuzioni. L’installazione su sistemi Debian è la consueta:
$ apt-get install gsm-utils
Il comando che permette l’invio dei messaggi di testo è gsmsendsms ed ha la seguente sintassi:
/usr/bin/gsmsendsms -C -d /dev/ttyUSB1 ""
I parametri da specificare, come è intuibile, sono il numero del centro messaggi, che varia da operatore ad operatore (ed è rintracciabile generalmente con una semplice ricerca in google), il device da utilizzare, che come precedentemente illustrato è /dev/ttyUSB1, il numero del cellulare di destinazione preceduto sempre dal prefisso internazionale (quindi per l’Italia +39) ed infine il testo da inviare.
Provando a lanciare il comando in questione l’output potrebbe essere il seguente:
/usr/bin/gsmsendsms[ERROR]: unexpected response '+ZUSIMR:2' when sending 'AT+CMGS=18'
Sebbene questo appaia a tutti gli effetti come un errore, l’SMS arriva comunque a destinazione.
Nello specifico…
Per eliminare questo inconveniente (che a tutti gli effetti è qualcosa di unicamente estetico) è necessario utilizzare il programma minicom e configurarlo per accedere al device /dev/ttyUSB1 alla velocità di 9600 baud.
Una rapida occhiata mostrerà infatti come la pendrive scriva costantemente il codice +ZUSIMR:2, confondendo il programma che si aspetta un “OK” come responso al comando AT inviato al dispositivo.
Il problema è risolvibile immettendo la seguente stringa:
AT+CPMS="SM","ME","MT"
attraverso minicom. Subito dopo l’immissione del comando la sequenza interminabile di +ZUSIMR:2 terminerà.
La stringa di comando AT passata al dispositivo seleziona dove verranno memorizzati i messaggi SMS in arrivo. L’ordine indicato è SM (SIM card), ME (dispositivo) e (altra area del dispositivo).
Configurare Nagios
Per concludere il progetto con successo non rimane altro da fare con configurare Nagios in modo che supporti le notifiche via SMS.
Nel file commands.cfg dela directory /etc/nagios3 andranno quindi definiti i nuovi tipi di modifica attraverso l’SMS in questa forma:
# 'notify-host-by-sms' command definition
define command{
command_name notify-host-by-sms
command_line /usr/bin/gsmsendsms -C -d /dev/ttyUSB1 $CONTACTPAGER$ "Nagios - $NOTIFICATIONTYPE$ - Host $HOSTNAME$ is in state $HOSTSTATE$ - Date/Time: $LONGDATETIME$"
}
# 'notify-service-by-sms' command definition
define command{
command_name notify-service-by-sms
command_line /usr/bin/gsmsendsms -C -d /dev/ttyUSB1 $CONTACTPAGER$ "Nagios - $NOTIFICATIONTYPE$ - Service $SERVICEDESC$ (Host $HOSTALIAS$) is in state $SERVICESTATE$ - Date/Time: $LONGDATETIME$"
}
infine, per ogni contatto definito all’interno della configurazione di Nagios (generalmente nel file contacts.cfg) andranno inserite le nuove notifiche create:
define contact{
contact_name
alias
service_notification_period 24x7
host_notification_period 24x7
service_notification_options u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email,notify-service-by-sms
host_notification_commands notify-host-by-email,notify-host-by-sms
email
pager
}
Riavviato il servizio, le notifiche via SMS per il contatto arriveranno al numero indicato nel campo pager:
$ /etc/init.d/nagios3 reload
Per testare subito quanto creato sarà sufficiente attraverso l’interfaccia web accedere al dettaglio di un host o di un servizio e cliccare sulla voce “Send custom service notification”. Se l’SMS arriva la missione è compiuta.
Accertarsi che il sistema stia funzionando
Certo si potrebbe sindacare sul fatto che se si rompe la macchina delle notifiche si è punto e a capo, ma questa è una cosa a cui si può porre rimedio inserendo degli invii automatici di SMS a crontab che segnalano come il sistema di notifiche SMS stia correttamente funzionando:
# Notifica quotidiana del funzionamento notifiche SMS
00 09 * * * root /usr/bin/gsmsendsms -C -d /dev/ttyUSB1 "Nagios: Se ricevi questo messaggio, il servizio di notifica SMS funziona correttamente."
Ogni giorno quindi, alle nove della mattina il numero di cellulare inserito nel comando riceverà un SMS che proverà il corretto funzionamento delle notifiche.
Conclusioni
Il metodo presentato nell’articolo è certamente economico, per certi versi non privo di difficoltà, ma indubbiamente alla portata di chiunque.
Scegliendo con oculatezza il piano tariffario associato alla SIM che sarà presente nella pendrive si potrà certamente rendere il servizio di monitoraggio di Nagios completo e professionale.
Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.
Lascia un commento