Pull to refresh

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

Reading time 2 min
Views 5.9K
Несколькими постами раньше уже были темы об использовании SMS уведомлений в Nagios. Сегодня я расскажу ещё об одном способе уведомлений. Нижеописанный способ несколько надёжнее описанных ранее, но и требует некоторых денежных вложений. Он полезен в том случае, когда какие-то из уведомлений являются критически важными (как, например, выход кондиционера из строя или увеличение влажности).

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

Физически подключается к серверу по 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

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+16
Comments 17
Comments Comments 17

Articles