O artigo será mais interessante para especialistas que usam uma pequena frota de dispositivos (sem usar um servidor separado, para um sistema de monitoramento ou registro), usuários domésticos, aqueles que estão começando a escrever scripts de dispositivos pela primeira vez e aqueles que não têm tempo / desejo de descobrir.

Fui solicitado a escrever meu próprio script pelo desejo de simplificar os scripts monstruosos que podem ser encontrados para este pedido na Internet, realizando esta ação simples ( um exemplo de um script do MikroTik Wiki), bem como para mostrar por que os engenheiros da MikroTik tornaram um método de análise simples impossível se você não é residente em Londres. :)
O artigo analisa um exemplo de uma notificação sobre o login e logout do usuário de um dispositivo MikroTik, mas também mostra exemplos:
Organização de tempo no log do dispositivo;
Analisar o log do dispositivo, procurando eventos por critérios;
Envio de notificações por email;
Enviando uma mensagem do Telegram.
Fundo. Por que os scripts de análise de log do MikroTik são "monstruosos"?
Por monstruosidade, queremos dizer uma grande quantidade de lógica de script e construção da forma:
:set tmpstring ([:pick [:tostr $tmpstring] 0 $findindex] . [:pick [:tostr $tmpstring] ($findindex + [:len [:tostr $ruleop]]) [:len [:tostr $tmpstring]]])
"" , .
MIkroTik, . :)
: " "account", (UTC+06)?
/log find where time > $LastRunTime topics ~ "account"
, 23:59:59 . 12 , 00:00:00 . ?
MikroTik : , , , , "" . , /, , .
? , MikroTik 00:00:00 UTC±0:00. , .. (UTC+06), 6 , . 06:00:00 .
(UTC±0:00), , .
( ), .
, , MikroTik id , (.id , , 0).
ParseLogAccountEndArrayID - .id ;
IDsEventsAccount .id , "account" - (: , ). 1000 , ;
LenArrayIDs - , StartArrayID - ( ID ), EndArrayID - 1( 0).
.id (IDsEventsAccount) .id (ParseLogAccountEndArrayID) (.. "account") (ParseLogAccountEndArrayID) - ( / ) ;
"account", (IDsEventsAccount) , " +1" ( ) " -1" (.. 0);
.id (IDMessage) ;
email, MikroTik;
Telegram , %0D%0A ;
ParseLogAccountEndArrayID ID "account" (EndArrayID).
email;
Telegram;
: read, write, test, policy.
[System] -> [Scripts] -> [+] -> [Name: ParseLogAccountEvents] -> [Policy: read, write, test, policy]
:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];
:local EmailMessageText;
:local TelegramMessageText;
:global ParseLogAccountEndArrayID;
:local IDsEventsAccount [/log find where topics ~ "account"];
:local LenArrayIDs [:len $IDsEventsAccount];
:local StartArrayID [:find $IDsEventsAccount $ParseLogAccountEndArrayID];
:local EndArrayID ($IDsEventsAccount -> ($LenArrayIDs-1));
:if ($EndArrayID != $ParseLogAccountEndArrayID and [:tobool $ParseLogAccountEndArrayID] ) do={
:local StartArray [:find $IDsEventsAccount $ParseLogAccountLastRunID];
:for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
:local IDMessage ($IDsEventsAccount ->$KeyArray );
:set EmailMessageText "$EmailMessageText \n\r $[/log get number=$IDMessage time] - $[/log get number=$IDMessage message];";
:set TelegramMessageText "$TelegramMessageText %0D%0A $[/log get number=$IDMessage time] - $[/log get number=$IDMessage message];";
}
:set ParseLogAccountEndArrayID $EndArrayID;
# START SEND EMAIL
:local SendFrom "ToMail@mail.ru";
:local PasswordMail "yourpassword";
:local SmtpServer [:resolve "smtp.mail.ru"];
:local UserName "FromMail@mail.ru";
:local SmtpPort 465;
:local UseTLS "tls-only";
:local SendTo "ToMail@mail.ru";
:local Subject "\F0\9F\94\93 AUTH: $DeviceName [$Date $Time]";
:local MessageText $EmailMessageText;
/tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort start-tls=$UseTLS user=$SendFrom password=$PasswordMail from=$SendFrom subject=$Subject body=$MessageText;
# END SEND EMAIL
# START SEND TELEGRAM MESSAGE
:local BotToken "YourBotID";
:local ChatID "YourChatID";
:local ParseMode "html";
:local DisableWebPagePreview True;
:local SendText "\F0\9F\94\93 <b>$DeviceName: AUTH</b> $TelegramMessageText";
:local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";
/tool fetch http-method=get url=$tgUrl keep-result=no;
# END SEND TELEGRAM MESSAGE
}
: read, write, test, policy.
[System] -> [Schedule] -> [+] -> [Name: ParseLogAccountEvents] —> [Interval: 00:05:00] -> [Policy: read, write, policy, test]
:
/system scheduler add name=ParseLogAccountEvents policy=read,write,policy,test on-event="/system script run ParseLogAccountEvents" interval=5m
, MikroTik , .

, Logging:
[System] -> [Logging] -> [Rules] -> [+] -> [Topics]
:
[/log find where message ~ "log"]
, / , ( Firewall , MikroTik Safe Mode) .
, , .
, Telegram , , . : " Email" " Telegram", , MikroTik.
: hAP ac lite, RouterOS 6.47.8 (stable).
PS Este é meu primeiro artigo sobre Habré, você pode julgar estritamente, mas de forma justa. O artigo não fornecerá nada de novo aos especialistas que usam sistemas de monitoramento ou servidores de log separados. Mas para iniciantes, usuários domésticos, administradores com uma pequena frota de dispositivos de rede - espero que seja útil.