Оповещение на 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
Заключение
Теперь можно выбирать интересующие нас сервисы и устройства и подключать наше логирование