Содержание

SMS-уведомления Nagios используя мобильный телефон

Использование мобильного телефона для SMS-уведомлений полезно в том случае, когда некоторые из уведомлений являются критически важными, как, например, выход кондиционера из строя или повышение влажности.

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

Для решения нашей задачи мы можем подключить телефон к серверу по bluetooth, com или usb. В качестве ПО мы будем использовать два скрипта: один из них умеет отправлять sms, второй проверяет статус мобильной сети. Если мобильная сеть недоступна, то Nagios отправляет сообщение на email об этом.

Оба скрипта написаны на языке Python и используют библиотеку Gammu для подключения к телефону.

check_sendsms.py - проверка статуса сети

check_sendsms.py
#!/usr/bin/env python
 
import gammu
import sys
 
# Create state machine object
sm = gammu.StateMachine()
 
# Read /etc/gammurc
sm.ReadConfig()
 
# Connect to phone
sm.Init()
 
# Reads network information from phone
netinfo = sm.GetNetworkInfo()
 
# Print information
print 'State: %s' % netinfo['State']
if netinfo['State'] != "HomeNetwork":
        sys.exit(2)

sendsms.py - отправка sms

sendsms.py
#!/usr/bin/env python
 
import gammu
import sys
 
if len(sys.argv) != 3:
    print 'Usage: sendsms.py number1[,number2][...] "message"'
    sys.exit(1)
 
# we are going to send first 160 characters only
text_message=sys.argv[2][:160]
 
# connect to phone
sm = gammu.StateMachine()
# Read /etc/gammurc                                                                                                           
sm.ReadConfig()
sm.Init()
 
# send messages
for phone_number in sys.argv[1].split(','):
    sms_message = {'Text': text_message, 'SMSC': {'Location': 1}, 'Number': phone_number}
    try:
        sm.SendSMS(sms_message)
    except:
        print "Sorry, I can't send message to %s" % phone_number

Несколько комментариев