Come inviare Log Mikrotik su Telegram

In questa guida, vediamo come controllare il registro di sistema dei nostri dispositivi Mikrotik. Grazie all’uso di questo script trovato sul web, posso dimostrarvi come installarlo sui nostri dispositivi Mikrotik e farlo funzionare con Telegram.

Cos’è Mikrotik?

Mikrotik è un azienda di prodotti elettronici, sopratutto di prodotti di telecomunicazione o elettronici. Mikrotik è una tra i marchi in circolazione nel produrre prodotti efficienti e professionali.

Come creare un bot Telegram:

Per creare un bot telegram vi consiglio di seguire la mia guida su come creare un bot Telegram al seguente link.

Come impostare lo script:

Per impostare lo script che vi lascio qui sotto, (attenzione lo script non è sviluppato da me è stato trovato sul web ed e per questo che voglio ringraziare il forum Mikrotik e il programmatore. Ora è passato un po di tempo quindi non so dirvi il nome dell’utente). 

Allora i campi vedete evidenziati nello script, sono i campi che dovete modificare a vostro piacimento; per esempio:

BOT_ID: Dovete inserire il votro Bot_ID del vostro bot telegram basta avviare questo bot e vi mostra il vostro ID della chat @getidsbot.

CHAT_ID: Mettere la chat dove volete che finiscano i registri del sistema

Se volete sapere il vostro numero della CHAT_ID basta

:local startBuf [:toarray [/log find message~”logged” || message~”admin” || message~”ether“]]: Nella sezione message evidenziato con le virgole dovete inserire il nome di una parte del testo del registro mikrotik come vedete io ho evidenziato in grassetto. Se volete di fianco agli altri parametri che ho impostato potete aggiungere più messaggi del testo basta stare dentro le parentesi quadrate e copiare il campo || message~”down” affianco agli altri testi. A questo punto non appena il registro fa apparire uno di questi nomi selezionati sul vostro script in telegram avete il risultato dei log completi, ovviamente dovete modificarlo come preferite voi, questo è solo un mio esempio.

# BEGIN SETUP Edit Here
:local myserver ([/system identity get name])
:local scheduleName "LogFilter"
:local bot "BOT_ID"
:local ChatID "CHAT_ID"
:local startBuf [:toarray [/log find message~"logged" || message~"admin" || message~"ether"]]
:local removeThese [:toarray ""]
# END SETUP

# warn if schedule does not exist and create it
:if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
/log warning "[LogFilter] Alert : Schedule does not exist. Creating schedule ...."
/system scheduler add name=$scheduleName interval=00:12:00 start-date=Sep/25/2023 start-time=startup on-event=LogFilter
/log warning "[LogFilter] Alert : Schedule created ."
}

# 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={
# loop through all removeThese array items
:local keepLog true
:foreach j in=$removeThese do={
# if this log entry contains any of them, it will be ignored
:if ([/log get $i message] ~ "$j") do={
:set keepLog false
}
}
: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." %0A%0A ")
}
:if ($currentTime = $lastTime) do={
:set keepOutput true
:set output ""
}
}
:if ($counter = ([:len $startBuf])-1) do={
:if ($keepOutput = false) do={
:if ([:len $message] > 0) do={
:set output ($output.$currentTime." ".$message)
}
}
}
:set counter ($counter + 1)
}
if ([:len $output] > 0) do={
/system scheduler set [find name="$scheduleName"] comment=$currentTime
/tool fetch url="https://api.telegram.org/bot$bot/sendMessage\?chat_id=$ChatID&text=$myserver%0A%0A$output" keep-result=no;
}

Installazione Script:

Per installarlo occorre aprire WinBox andare su <<System>> poi su <<Script>>. Infine in nome script mettete <<LogFilter>> (è molto importante scrivere questo nome altrimenti lo script non parte con tutte le funzionalità). Copiate nel campo bianco lo script, e selezionate le spunte come in foto, poi premiamo su <<Apply>> e clicchiamo su <<Run Script>>.

A questo punto lo script è impostato che esegue il controllo ogni 5secondi per la verifica, se dopo 5 secondi nel registro c’è una modifica con i seguenti nomi impostati lui vi avvisa sulla chat_bot di Telegram.