====== SMS-уведомления Nagios используя мобильный телефон ======
Использование мобильного телефона для SMS-уведомлений полезно в том случае, когда некоторые из уведомлений являются критически важными, как, например, выход кондиционера из строя или повышение влажности.
Подразумевается использование сим-карты с корпоративным тарифом (дабы деньги на телефоне не кончились неожиданно).
Для решения нашей задачи мы можем подключить телефон к серверу по bluetooth, com или usb. В качестве ПО мы будем использовать два скрипта: один из них умеет отправлять sms, второй проверяет статус мобильной сети. Если мобильная сеть недоступна, то Nagios отправляет сообщение на email об этом.
Оба скрипта написаны на языке Python и используют библиотеку Gammu для подключения к телефону.
===== 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 =====
#!/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
{{tag>nagios}}