News Ticker

Nagios: notifiche SMS con la pendrive Onda MT503HS (e parenti prossime)

nagiosOnda MT503HS 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.

  • Ho fatto piu o meno la stessa cosa con una huawei usb e169…
    complimenti per l’articolo!

    Ios77

  • Sì, alla fine la solfa è sempre quella, cambia solo il modello di chiavetta.
    Aggiungo che in questo caso tutto funziona con la versione pacchettizzata di usb_modeswitch, perlomeno con Debian Lenny che setta tutte i file (le regole udev in pratica) nella maniera ottimale.
    Grazie ios, e se vuoi collaborare scrivendo di tue esperienze, la porta è spalancata!

  • mauro virgili

    io uso linux mint
    vorrei attivare nella azienda zanitaria dove lavoro un pc linux con Nagios x allertare via sms i manutentori su servers e apparati di rete…che kiavette usb posso usare?grazie dr virgili UDINE

  • Ciao Mauro,
    non credo che l’utilizzo di Linux Mint possa creare problemi, alla fine si tratta di una variante di Ubuntu, quindi una distribuzione Debian-based.
    Sulla scelta della chiavetta oltre alla Honda qui presentata ios77 ha citato la sua esperienza con una Huawei, quindi la scelta è decisamente ampia.
    In bocca al lupo ed a presto… Raccontaci com’è andata.

  • panoramix

    È un\’ottima scheda, peccato non avere la versione stampabile
    Un buon lavoro
    Grazie

  • Ciao panoramix,
    ho approfittato della tua esigenza per aggiungere la funzionalità di stampa per tutti gli articoli di MMUL: alla fine di ogni articolo trovi un link “Stampa questo articolo” attraverso il quale accedi ad una pagina “printer-friendly”.

    Grazie del suggerimento e a presto!

  • Carlo Muraro

    Vorrei utilizzare questa chiavetta per catturare gli SMS ricevuti e elaborarli da parte di una mia applicazione in ambiente Windows.
    La chiavetta risponde ai comandi AT sulla porta seriale COM5 solo se è disattivo il programma fornito in dotazione una volta avviato ovviamento non risponde più. Ho notato ,con un monitor seriale, che la COM5 non viene utilizzata per l’invio dei comandi alla chiavetta. Come posso pilotarla con la mia applicazione ? se via TCPIP su quale porta? Infine dove posso trovare un elenco completo dei comandi AT?

    ciao e grazie

  • Ciao Carlo,
    purtroppo non sono in grado di aiutarti in quanto l’ambiente su cui stai sviluppando non mi è familiare. Ad ogni modo qui: http://www.cellular.co.za/at_etsi.htm puoi trovare una serie di link ai comandi AT disponibili.

  • Daniele

    Hai suggerimenti per CENTOS?
    Non trovo il pacchetto usb-modeswitch

    Grazie 1000

  • Ciao,
    sono disponibili su http://rpm.pbone.net/.

    A presto!