07.04.2015

SMS оповещения из The Dude

Какой смысл в мониторинге ключевых устройств, если об их некорректной работе будет знать только сама система мониторинга? Именно поэтому система мониторинга должна оповещать админа о некорректной работе. Я работаю Mikrotik'ами, поэтому использую фирменную систему мониторинга The Dude. И сейчас мы научим её слать почту и смс.



По умолчанию The Dude умеет отправлять email, но для этого ей нужен SMTP сервер без авторизации. Что нам поднимать конечно же не имеет смысла. В общем, разработчики поленились сделать кошерно.

Пытливые умы же научились отправлять почту сторонним приложением.


  1. Качаем SMTP-клиент mailsend
  2. Кладем его, допустим, сюда C:\Program Files (x86)\Dude\mailsend\mailsend.exe (не забудьте переименовать экзешник)
  3. Создаём файлик mailsend.cmd следующего содержания:  
    :: Send email notifications from Dude via Gmail
    :: 
    set mailsenderdir=C:\Program Files (x86)\Dude\mailsend
    set mailsender=mailsend.exe
    set smtpsender=username@gmail.com
    set smtpsenderfullname=username
    set smtpserver=smtp.gmail.com
    set smtpport=465
    set smtpuser=username@gmail.com
    set smtppwd=password
    set mailto=username@gmail.com
    ::
    ::
    "%mailsenderdir%\%mailsender%" -smtp %smtpserver% -port %smtpport% -ssl -auth -user %smtpuser% -pass %smtppwd% -t %mailto% -f %smtpsender% -name "%smtpsenderfullname%" +cc +bc -q -sub %1 -M %2
    ::
    ::pause
    ::
Эти параметры меняем на свои: smtpsender - ящик, с которого будут отправляться письмаsmtpsenderfullname - имя пользователя этого ящикаsmtpuser - опять ящикsmtppwd - пароль к немуmailto - ящик админа (на который будем слать алерты)

4. Создаем новое уведомление в The Dude:
Имя: mail
Тип: execute on server
Команда: "C:\Program Files (x86)\Dude\mailsend\mailsend.cmd" "Service [Probe.Name] on [Device.Name] is now [Service.Status]" "Service [Probe.Name] on [Device.Name] is now [Service.Status] ([Service.ProblemDescription])"
После нажатия кнопки Test письмо должно упасть на почту.


С почтой разобрались. Теперь нужно научить Дудку отправлять СМС. Саму мониторилку мы больше мучать не будем - СМС умеет отправлять гуглопочта.

Итак, что нужно для начала: у вас должен быть привязан телефонный номер к Google Calendar, как это сделать написано вот тут — Регистрация мобильного телефона:
support.google.com/calendar/bin/answer.py?hl=ru&hlrm=en&answer=45351
  1. Создайте новый ярлык в Gmail с именем, например, SMSnotify (или любым другим, по вашему усмотрению). Как это сделать написано вот тут – Использование ярлыков:
    support.google.com/mail/bin/answer.py?hl=ru&hlrm=ru&answer=118708#0
  2. Создайте фильтр, который будет применять ярлык SMSnotify к письмам от системы мониторинга ( From: username@gmail.com). Как это сделать, написано вот тут – Использование фильтров:
    support.google.com/mail/bin/answer.py?hl=ru&hlrm=ru&answer=6579#0
  3. Войдите в Google Drive и создайте новую электронную таблицу (Spreadsheet). Откройте созданную таблицу и в верхнем меню выберите Tools > Script Editor.
  4. Нужно создать доп. календарь и настроить SMS уведомления: установить по-умолчанию для всех новых встреч вот так:
    Настройки->Календари->Уведомления->По умолчанию->SMS->%% мин
    В этом примере имя календаря будет "email"
  5. Вставляем следующий код:
function my_notification() { var calendar = CalendarApp.getOwnedCalendarsByName('email')[0]; //открываем календарь с именем "email" var threads = GmailApp.getUserLabelByName('SMSnotify').getThreads(); //переменная, в которой хранится коллекция цепочек с ярлыком SMSnotify var now = new Date(); if(threads == 0) return; // прекращение выполнения, если новых цепочек нет for(i in threads) // создаем события { calendar.createEvent(threads[i].getFirstMessageSubject(), new Date(now.getTime()+60000), new Date(now.getTime()+60000)); } GmailApp.getUserLabelByName('SMSnotify').removeFromThreads(threads); //снимаем метки "SMSnotify" с цепочек }


6.  После того, как вы ввели код, нужно создать триггер по которому и будет запускаться скрипт. Для этого кликаем на меню "Ресурсы", а в нем на "Триггеры текущего скрипта". 
7.  Нам нужен time-driven триггер с частотой повторения одна минута.

Этот скрипт будет проверять входящие от с ярлыком SMSnotify (от юзера username@gmail.com). И, в случае наличия новых писем создавать событие в календаре и снимать ярлык с уже обработанного письма. СМС будет слать сам календарь.

Статья написана методом копипаста! Навеяно этим: отправка email уведомлений, отправка СМС из гуглопочты

7 комментариев:

  1. Гугл отключил возможность посылок смс...

    ОтветитьУдалить
    Ответы
    1. На момент написания поста эта функция ещё работала. Сейчас можно использовать отправку СМС из самого Mikrotik, если к нему подключен USB-модем или PCI модуль

      Удалить
  2. Или отправлять СМС через различные онлайн-сервисы Fetch'ем

    ОтветитьУдалить
  3. Анонимный15.01.2020, 02:41

    Как проверить на каком этапе проблема в отправке почты через dude ?

    ОтветитьУдалить
    Ответы
    1. Через скрипт mailsend отправляете? Если да, то попробуйте сначала отправить вручную. Если уйдет, то проблема в вызове скрипта из Dude. Если нет - в mailsend'e

      Удалить
    2. Анонимный21.01.2020, 23:01

      Проверил, похоже порт закрыт был

      Есть какой нибудь ресурс (конфа, форум), где можно по Dude пару вопросов задать?

      Удалить

Примечание. Отправлять комментарии могут только участники этого блога.