697 April 8, 2024, 1:08 p.m.

Mikrotik RouterOS log/backup to email & telegram

Задача:

  • сформировать и отправить на email ежедневную сводку и копию насроек роутера Microtik.
  • сформировать и отправить на Telegram ежедневную сводку и копию насроек роутера Microtik.

На хабре есть статья, где приводится подобный скрипт, но из-за того что он устарел, по синтаксису, предлагаю свой, немного исправленный вариант данного скрипта. Ссылка на оригинал ниже.

Пример для отправки на почту

:global backupfile ([/system identity get name] . ".backup") 
:if ([/file find name=$backupfile] != "") do={/file rem $backupfile}
:delay 2s
:global logMessages;
:set logMessages "";
:foreach i in=[/log find ] do={
:set logMessages ($logMessages . [/log get $i time ] . " ");
:set logMessages ($logMessages . [/log get $i message ]);
:set logMessages ($logMessages . "\n");
}
/system backup save name=$backupfile password=password
:delay 5s
/tool e-mail send to="[email protected]" subject=([/system identity get name]." daily log&backup") file=$backupfile body=("Router's backup file " . [/system identity get name] . ". \nCompleted: " . [/system clock get time] . " " . \ [/system clock get date] . " \n____________________\n \nUptime: " . [/system resource get uptime] . "\nFree RAM: " . [/system resource get free-memory] . " of " . [/system resource get total-memory] . " kbytes. \nFree space: " . [/system resource get free-hdd-space] . " of " . [/system resource get total-hdd-space] . " kbytes. \nBad-blocks: " . [/system resource get bad-blocks] . " %. \nCurrent CPU load: " . [/system resource get cpu-load] . " % \n____________________\n \nLast events in log file: \n \n" . $logMessages . " \n____________________ \n" . [/system identity get name])

Пример для отправки в Telegram

Добавляем скрипт с таким содержанием. В силу особенностей телеграм, мы не можем отправлять большие сообшения, поэтому будут отправляться последнии 3000 символов.

Также через Router OS нельзя нативно отправить файл с резервной копией прошивки в телеграм, поэтому мы просто ее храним на устройстве.

/system backup save name=$backupfile password=password
:delay 5s

:global logMessages;
:set logMessages "";
:foreach i in=[/log find] do={
    :set logMessages ($logMessages . [/log get $i time] . " ");
    :set logMessages ($logMessages . [/log get $i message]);
    :set logMessages ($logMessages . "%0A");
    :if ([:len $logMessages] > 3000) do={
        :put "Latest: $logMessages";
        :set logMessages "";
    }
}
:if ($logMessages != "") do={
    :put "eeee: $logMessages";
}

:local body ("Router's backup file " . [/system identity get name] . ". %0ACompleted: " . [/system clock get time] . " " . \ [/system clock get date] . " %0A____________________%0A %0AUptime: " . [/system resource get uptime] . "%0AFree RAM: " . [/system resource get free-memory] . " of " . [/system resource get total-memory] . " kbytes. %0AFree space: " . [/system resource get free-hdd-space] . " of " . [/system resource get total-hdd-space] . " kbytes. %0ABad-blocks: " . [/system resource get bad-blocks] . " %. %0ACurrent CPU load: " . [/system resource get cpu-load] . " % %0A____________________%0A %0ALast events in log file: %0A %0A" . $logMessages . " %0A____________________ %0A" . [/system identity get name])

/tool fetch url="https://api.telegram.org/bot<TELEGRAM_TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=$body" keep-result=no

Источники

Оригинал скрипта