дневник Седьмого

воскресенье, 7 октября 2012 г.

Mikrotik RouterOS log/backup to email

Хочу поделиться своим "вылизанным" скриптом бэкапа конфигурации и отсылки логов на почту с Mikrotik RouterBoard RB750GL (в моём случае 5.14, firmware 2.38). Думаю подойдёт к большинству устройств на этой славной ОС. Преимущество подхода в том, что сам файл конфигурации приходит в качестве приложенного к письму с логами файла. А логи находятся прямо в письме - не в приложении.

#:log info "///----> Я начал бэкапиться" (расскоменчиваю эти строки для дебага)
:global backupfile ([/system identity get name] . ".backup") #задаю переменную
:if ([/file find name=$backupfile] != "") do={/file rem $backupfile} #удаляю, если файл уже существует
:delay 2s

#:log info "///----> Подготавливаю лог для отправки"

: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")
}

#:log info "///----> Создаю бэкап"
/system backup save name=$backupfile
#:log info "///----> Жду 5 сек. завершения процедуры"
:delay 5s
#:log info "///----> Посылаю конфиг на e-mail" (следующий код - одна длинная строка!)
/tool e-mail send to=mail@examle.com subject=("router daily backup") file=$backupfile body=("Бэкап конфигурационного файла маршрутизатора " . [/system identity get name] . ". \nВыполнен: " . [/system clock get time] . " " . \ [/system clock get date] . " \n____________________\n \nUptime: " . [/system resource get uptime] . "\nСвободно оперативки: " . [/system resource get free-memory] . " из " . [/system resource get total-memory] . " Кбайт. \nСвободное место: " . [/system resource get free-hdd-space] . " из " . [/system resource get total-hdd-space] . " Кбайт. \nBad-блоки: " . [/system resource get bad-blocks] . " %. \nЗагрузка процессора на данный момент: " . [/system resource get cpu-load] . " % \n____________________\n \nПоследние записи в логе: \n \n" . $logMessages . " \n____________________ \n" . [/system identity get name])
#:log info "///----> Жду 10 сек. пока письмо отправится"
:delay 10s
/file remove $backupfile
:log info "///----> Бэкап завершён. Файл послан на mail@example.com. Ура!"

Ставлю на еженощное выполнение и в результате вместе с новостями с утра читаю вести с фронта - на почту приходит письмо такого вида