Несколькими постами раньше уже были темы об использовании SMS уведомлений в Nagios. Сегодня я расскажу ещё об одном способе уведомлений. Нижеописанный способ несколько надёжнее описанных ранее, но и требует некоторых денежных вложений. Он полезен в том случае, когда какие-то из уведомлений являются критически важными (как, например, выход кондиционера из строя или увеличение влажности).
Способ заключается использовании мобильного телефона с корпоративным тарифом (дабы деньги на телефоне не кончились неожиданно).
Физически подключается к серверу по bluetooth, com или usb. На уровне ПО мы будем использовать два скрипта: один из них умеет отправлять sms, второй проверяет статус мобильной сети. Если мобильная сеть недоступна, то nagios отправляет сообщение на email.
Оба скрипта написаны на python и используют библиотеку gammu для подключения к телефону.
Способ заключается использовании мобильного телефона с корпоративным тарифом (дабы деньги на телефоне не кончились неожиданно).
Физически подключается к серверу по 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