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
Несколько комментариев
- Скрипт sendsms.py в качестве первого параметра принимает номера телефонов в виде +7xxxxxxxxxx через запятую, и в качестве второго текст сообщениея. Кроме того, SMS-сообщение урезается до 160-ти символов, дабы не усложнять систему использованием Multi Part SMS и не увеличивать стоимость таких уведомлений.
- Примеры команд отправки уведомлений Nagios по sms
# 'notify-service-by-sms' command definition define command{ command_name notify-service-by-sms command_line /etc/_orga/nagios/nagios-sms/sendsms.py $CONTACTPAGER$ "Nagios - $NOTIFICATIONTYPE$ : $HOSTALIAS$/$SER VICEDESC$ is $SERVICESTATE$ ($SERVICEOUTPUT$)" } # 'notify-host-by-sms' command definition define command{ command_name notify-host-by-sms command_line /etc/_orga/nagios/nagios-sms/sendsms.py $CONTACTPAGER$ "Nagios - $NOTIFICATIONTYPE$ : Host $HOSTALIAS$ is $HOSTSTATE$ ($HOSTOUTPUT$)" }
- Пример команды проверки статуса сети
# 'check_sendsms' command definition define command{ command_name check_sendsms command_line $USER1$/check_sendsms.py }
- /etc/gammurc для bluetooth будет выглядеть следующим образом
[gammu] port = /dev/rfcomm0 connection=at19200