Kontynuacja postu: https://blog.cssoft.pl/post/mikrotik-wysylaj-maila-jesli-ktos-duzo-sciaga
System -> Scripts -> [+] Name = "Download 1G" Source
Zobacz całość
# BEGIN SETUP :local scheduleName "Download 10M" :local emailAddress "biuro@cssoft.pl" :local startBuf [:toarray [/log find message~"sciaga_10M"]] :local hostname [/system identity get name] # END SETUP # warn if schedule does not exist :if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={ /log warning "[LOGMON] ERROR: Schedule does not exist. Create schedule and edit script to match name" } # get last time :local lastTime [/system scheduler get [find name="$scheduleName"] comment] # for checking time of each log entry :local currentTime # log message :local message # final output :local output :local keepOutput false # if lastTime is empty, set keepOutput to true :if ([:len $lastTime] = 0) do={ :set keepOutput true } :local counter 0 # loop through all log entries that have been found :foreach i in=$startBuf do={ :local keepLog true :if ($keepLog = true) do={ :set message [/log get $i message] # LOG DATE # depending on log date/time, the format may be different. 3 known formats # format of jan/01/2002 00:00:00 which shows up at unknown date/time. Using as default :set currentTime [ /log get $i time ] # format of 00:00:00 which shows up on current day's logs :if ([:len $currentTime] = 8 ) do={ :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime) } else={ # format of jan/01 00:00:00 which shows up on previous day's logs :if ([:len $currentTime] = 15 ) do={ :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15]) } } # if keepOutput is true, add this log entry to output :if ($keepOutput = true) do={ :set output ($output.$currentTime." ".$message."\r\n") } # if currentTime = lastTime, set keepOutput so any further logs found will be added to output # reset output in the case we have multiple identical date/time entries in a row as the last matching logs # otherwise, it would stop at the first found matching log, thus all following logs would be output :if ($currentTime = $lastTime) do={ :set keepOutput true :set output "" } } # if this is last log entry :if ($counter = ([:len $startBuf]-1)) do={ # If keepOutput is still false after loop, this means lastTime has a value, but a matching currentTime was never found. # This can happen if 1) The router was rebooted and matching logs stored in memory were wiped, or 2) An item is added # to the removeThese array that then ignores the last log that determined the lastTime variable. # This resets the comment to nothing. The next run will be like the first time, and you will get all matching logs :if ($keepOutput = false) do={ # if previous log was found, this will be our new lastTime entry :if ([:len $message] > 0) do={ :set output ($output.$currentTime." ".$message."\r\n") } } } :set counter ($counter + 1) } # If we have output, save new date/time, and send email if ([:len $output] > 0) do={ /system scheduler set [find name="$scheduleName"] comment=$currentTime /tool e-mail send to="$emailAddress" subject="[$hostname] Alert [$scheduleName] - $currentTime" body="$output" /log info "[LOGMON] New logs found, send email" }
https://wiki.mikrotik.com/wiki/Monitor_logs,_send_email_alert_/_run_script
Skrypt do zrzucania logów do pliku + wysyłanie ich na maila i FTP
System -> Scripts -> [+]
Name = "Logs_backup"
Source
# months array :local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"); # get time :local ts [/system clock get time] :set ts ([:pick $ts 0 2].[:pick $ts 3 5].[:pick $ts 6 8]) # get Date :local ds [/system clock get date] # convert name of month to number :local month [ :pick $ds 0 3 ]; :local mm ([ :find $months $month -1 ] + 1); :if ($mm < 10) do={ :set mm ("0" . $mm); } # set $ds to format YYYY-MM-DD :set ds ([:pick $ds 7 11] . $mm . [:pick $ds 4 6]) # file name for logs backup - servername-YYYYMMDD-HHMMSS_logs.txt :local fname ([/system identity get name]."-".$ds."-".$ts."_logs.txt") :local sfname ("/".$fname1) # backup logs /log print file=$sfname1 :log info message="Logs backup finished (1/1)."; # ftp server :local ftphost "192.168.1.1" :local ftpuser "ftp_user" :local ftppassword "ftp_password" :local ftppath "/folder/subfolder/" # upload the system backup :log info message="Uploading logs backup (1/1)." /tool fetch address="$ftphost" src-path=$sfname1 user="$ftpuser" mode=ftp password="$ftppassword" dst-path="$ftppath/$fname" upload=yes # delay time to finish the upload - increase it if your backup file is big #:delay 30s; :local mname ([/system identity get name]." - Backup logs - ".$ds) :local mailTo "admin@domain.com" :local emailbody ("Plik z backupem logow: ".$sfname1) /tool e-mail send subject=$mname to=$mailTo body=$emailbody
Następnie należy dodać skrypt do Schedulera
System -> Scheduler -> [+]
Name = "Logs_backup" Interval ="1d 00:00:00" On Event /system script run Logs_backup