Оповещение на e-mail (GMail) от Dude с определенной периодичностью и накоплением событий

В Dude есть уже встроенный инструмент для отправки уведомлений на e-mail, который позволяет отправлять письма при срабатывании триггеров что, в общем-то, удобно. Однако если устройств много, то иногда не спасает и группировка по родительской связи, подробнее смотри секцию «Notification tree structure» https://wiki.mikrotik.com/wiki/Manual:The_Dude_v6/Notifications. В таких случаях прилетает куча писем, что не хорошо. Захотелось, чтобы события накапливались в некий пул, и отправлялись в определенные промежутки времени всем скопом. Долгие поиски ничего не дали и родилась следующая идея: писать события в локальный лог файл, потом если в нем что-то есть по планировщику отправлять его по почте и очищать.  

Настройка записи событий в локальный файл в Dude

Notifications->+

 

Настройка записи в файл от Dude на RouterOS

 System -> Logging->+

Отправка e-mail через Gmail на RouterOS

Задание настроек:

/tool e-mail set address=smtp.gmail.com from=username@gmail.com password="*****" port=587 start-tls=yes user= username@gmail.com

Возможные грабли:

GMail может не разрешать подключиться ROS к сервису, аргументируя это тем что соединение используется «Небезопасным приложением» – тогда надо зайти в аккаунт из браузера и перейти по ссылке https://www.google.com/settings/security/lesssecureapps  и разрешить «Небезопасные приложения»

Проверка отправки:

/tool e-mail send to="me@gmail.com" subject="test" body="test message"

Скрипт для отправки лога

System ->Scripts->+

Name: SendDudeLogToEmail

##########################################

###  24-09-2020

###  by Legelf

##########################################

:local dudelogfilename "dude_event_log.0.txt";

:local dudelogfilesize 0;

#Получатель один адрес

:local emailto "admin@gmail.com";

#Копия адреса через запятую

:local emailcopy "second_admin@gmail.com";

:local systemname [/system identity get name];

:local emailsubject "Мониторинг от $systemname";

:local emailbody "Смотри во вложении";

#Get size of dude log file

set $dudelogfilesize [/file get $dudelogfilename size]

#If log not empty

if ($dudelogfilesize > 0) do={

:log info "$dudelogfilename is NOT empty";

#Отлючим логирование на время работы скрипта

/system logging disable [/system logging find action="dudeeventlog"]

#Send e-mail

/tool e-mail send to=$emailto cc=$emailcopy subject=$emailsubject file=$dudelogfilename body=$emailbody

:delay 5;

#Удалим старый лог и запустим логирование

/file remove $dudelogfilename;

:delay 3;

/system logging enable [/system logging find action="dudeeventlog"]

:log info "$dudelogfilename  log cleared";

} else={

:log info "$dudelogfilename log is empty nothing to do";

}

#########################################

И поставим все это в планировщик:

add interval=30m name="Send notification email" on-event="/system script run SendDudeLogToEmail" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=sep/03/2020 start-time=00:00:00

Заключение

Теперь можно выбирать интересующие нас сервисы и устройства и подключать наше логирование