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

    Несколькими постами раньше уже были темы об использовании 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

    Поделиться публикацией

    Комментарии 17

      –2
      Отлично.

      Как раз собираюсь это сделать.
        0
        а зачем урезать смс? Проще ведь, заранее, составить сообщение от Nagios, не длиннее 160символов
          0
          Это рискованно, т.к. есть шанс однажды про это забыть и сообщение от другой команды или с более длинным именем сервера поломает уведомления.
            0
            библиотека разве не позволяет прозрачно отправлять большие сообщения?
              0
              Глубоко не копал, но, кажется, не умеет.
          +1
          У себя использую связку Nagios3 + smstools. Оба пакета можно спокойно выкачать из репозиториев.
          По smstools — есть очереди отправки, отчеты о состоянии SMS сообщений.
          Все это завязано на MySQL. Все отлично работает.
            0
            Согласен, тоже использую smstools. Отличная утилита, в дополнение могу сказать: реализована отправка смс-сообщений через несколько устройств, возможность обработки событий(например: входящее сообщение) и полный список настроек по отправке смс.
              0
              smstools показался мне слишком сложным для такой простой задачи. Кроме того, на сколько я помню, я не нашёл в smstools возможности проверить состояние сети.
              0
              ах да, важно еще, smstools умеет склеивать смс, то бишь не будет проблем с отправкой длинных смс ;)
                +1
                СМС — удобно, мы это настраивали, правда без всяких SMStools (у некоторых операторов сотовой связи, вроде Utel, есть возможность отправлять письмо на внутр. ящик, которое приходит в виде СМС). Правда показалось назойливым. Лично мне больше понравилось отправление по электронной почте и через ICQ (могу поделиться кодом).
                  0
                  Делись
                    0
                    Отправка смс через email-шлюз не годится для критичных сообщений. Нет отчета о доставке, время доставки может сильно плавать. Очень сильно зависит от оператора.
                      0
                      У mail2sms может быть долгая задержка, кроме того бывает, что они обрезают сообщение до 1 смс.
                        0
                        у нас тоже через такую почту, но mon вместо nagios
                        0
                        Для тех у кого есть SMS-шлюз на SMS-центр полезны были бы: smppapi — для java, Net::SMPP — для perl
                          0
                          зачем так все усложнять?
                          уже лет 5 пользуюсь smsmail.ru — отлично и моментально доставляет.
                          нагиос шлет туда обо всем что происходит на сервере, если мучает паранойя на тему отключения всего сервера от сети, регистрируем аккаунт на pingdom.com, он бесплатно мониторит один сервер, уведомления опять же шлет на smsmail.ru
                            0
                            В принципе согласен, если есть крайне положительный опыт с smsmail.ru, то почему бы им не пользоваться. В любом случае спасибо за информацию.
                            Хотя есть случаи, когда, когда это не только не достаточно надёжно, но и невозможно. Например, в нашей производственной сети нельзя иметь прямых соединений с внешним миром, соответственно с интернет sms-шлюзом пришлось бы много городить.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое