Script muy útil para darnos información a diario (programarlo en scheduler) sobre el estado de nuestro sistema
Bash:
:local ipv4 [/ip cloud get public-address];
# :local ipv6 [/ip cloud get public-address-ipv6]; En RouterOS 6.49 no funciona esta línea
:local ipv6 [:pick [/ipv6 dhcp-client get [find] prefix] 0 24];
:local uptime [/system resource get uptime];
:local CurrentTemp [/system health get temperature];
:local FreeMemory ([/system resource get free-memory]/1000000);
:local TotalMemory ([/system resource get total-memory]/1000000);
:local cpu [/system resource get cpu];
:local cpuCount [/system resource get cpu-count];
:local cpuFrequency [/system resource get cpu-frequency];
:local cpuLoad [/system resource get cpu-load];
:local freeHdd ([/system resource get free-hdd-space]/1000000);
:local totalHdd ([/system resource get total-hdd-space]/1000000);
:local architectureName [/system resource get architecture-name];
:local boardName [/system resource get board-name];
:local version [/system resource get version];
:local DeviceName [/system identity get name];
# START Send Email Module
:local SendTo "micuenta@gmail.com";
:local Subject "\F0\9F\9A\80 $DeviceName System Status";
:local MessageText "IPv4: $ipv4\nIPv6: $ipv6\n\nTemperature: $CurrentTemp C\nUptime: $uptime\nFree Memory: $FreeMemory MB\nTotal Memory: $TotalMemory MB\nCPU: $cpu\nCPU Count: $cpuCount\nCPU Frequency: $cpuFrequency MHz\nCPU Load: $cpuLoad %\nFree Disk: $freeHdd MB\nTotal Disk: $totalHdd MB\nArchitecture: $architectureName\nBoard Name: $boardName\nSoftware Version: $version";
:local FileName "";
:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module
# START Send Telegram Module
:local MessageText "\F0\9F\9A\80 $DeviceName System Status:%0AIPv4: $ipv4%0AIPv6: $ipv6%0ATemperature: $CurrentTemp %C2%B0 C%0AUptime: $uptime%0AFree Memory: $FreeMemory MB%0ATotal Memory: $TotalMemory MB%0ACPU Load: $cpuLoad %%0ACPU: $cpu%0ACPU Count: $cpuCount%0ACPU Frequency: $cpuFrequency MHz%0AArchitecture: $architectureName%0ABoard Name: $boardName%0ASoftware Version: $version%0AFree Disk: $freeHdd MB%0ATotal Disk: $totalHdd MB";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
:log info "Sent Email: WAN IP & System Status"
:log info "Sent Telegram: WAN IP & System Status"
Resultado por ejemplo en Telegram:
Ver el adjunto 84816
Editado 09/dic/2021: Script compatible con versión 7.1
Bash:
:local ipv4 [/ip cloud get public-address];
:local ipv6 [/ip cloud get public-address-ipv6];
:local uptime [/system resource get uptime];
:local CurrentTemp [/system health get [find name=temperature] value];
:local FreeMemory ([/system resource get free-memory] / 1024 / 1024);
:local TotalMemory ([/system resource get total-memory] / 1024 / 1024);
:local cpu [/system resource get cpu];
:local cpuCount [/system resource get cpu-count];
:local cpuFrequency [/system resource get cpu-frequency];
:local cpuLoad [/system resource get cpu-load];
:local freeHdd ([/system resource get free-hdd-space] / 1024 / 1024);
:local totalHdd ([/system resource get total-hdd-space] /1024 / 1024);
:local architectureName [/system resource get architecture-name];
:local boardName [/system resource get board-name];
:local version [/system resource get version];
:local DeviceName [/system identity get name];
# START Send Email
/tool e-mail send to="ginesidh@gmail.com" from="Mikrotik Despacho" subject="\F0\9F\9A\80 $DeviceName System Status" body="IPv4: $ipv4\nIPv6: $ipv6\n\nTemp: $CurrentTemp C\nUptime: $uptime\nFree Memory: $FreeMemory MB\nTotal Memory: $TotalMemory MB\nCPU: $cpu\nCPU Count: $cpuCount\nCPU Frequency: $cpuFrequency MHz\nCPU Load: $cpuLoad %\nFree Disk: $freeHdd MB\nTotal Disk: $totalHdd MB\nArchitecture: $architectureName\nBoard Name: $boardName\nSoftware Version: $version"
# END Send Email
# START Send Telegram Module
:local MessageText "\F0\9F\9A\80 $DeviceName System Status:%0AIPv4: $ipv4%0AIPv6: $ipv6%0ATemperature: $CurrentTemp %C2%B0 C%0AUptime: $uptime%0AFree Memory: $FreeMemory MB%0ATotal Memory: $TotalMemory MB%0ACPU Load: $cpuLoad %%0ACPU: $cpu%0ACPU Count: $cpuCount%0ACPU Frequency: $cpuFrequency MHz%0AArchitecture: $architectureName%0ABoard Name: $boardName%0ASoftware Version: $version%0AFree Disk: $freeHdd MB%0ATotal Disk: $totalHdd MB";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
:log info "Sent Email: WAN IP & System Status"
:log info "Sent Telegram: WAN IP & System Status"
Editado 03/feb/2022: Nuevas funcionalidades. Colaborador: @jerogabe
Se ha mejorado el script original añadiendo la obtención de información en cuanto a la cantidad de tráfico acumulado en la interfaz WAN (ether1, pppoe-out1, etc) tanto en TX, RX y Consumo total.
Para ello creamos un nuevo script que genera una
variable Global y procuramos que este script se ejecute al arranque del router para que siempre esté disponible para su llamada por parte de cualquier script.
Este script o "función" se va a encargar de convertir a las distintas unidades B, KiB, MiB, GiB. dependiendo del valor obtenido "en bytes" al ejecutar la instrucción:
[/interface get [find name=pppoe-out1] tx-byte]. En este caso tendríamos una respuesta por ejemplo de 849029897 pero a través de la nueva función lo convertiría a 812.2 MiB, esto ya es otra cosa...
Bien, creamos el script y lo ejecutamos:
Bash:
:global human do={
:if ([:typeof $1]="nothing") do={
:error "must provide a byte value to humanize";
};
:local input [:tonum $1];
:if ([:typeof $input]!="num") do={
:error "cannot convert $1 to number";
};
:local q;
:local r;
:local output;
:if ($input<1024) do={
:set $output "$input B";
} else={
:if ($input<1048576) do={
:set q ($input/1024);
:set r ($input-$q*1024);
:set r ($r/102);
:set output "$q.$r KiB";
} else={
:if ($input<1073741824) do={
:set q ($input/1048576);
:set r ($input-$q*1048576);
:set r ($r/104858);
:set output "$q.$r MiB"
} else={
:set q ($input/1073741824);
:set r ($input-$q*1073741824);
:set r ($r/107374182);
:set output "$q.$r GiB"
}
}
}
:return $output
};
Como vemos, ha creado una variable global llamada "human" (la puedes llamar como quieras), ya estaría disponible para su uso. Lo puedes comprobar en Winbox en System -> Scripts -> Pestaña Environment.
Ahora el script modificado.
Bash:
# Llamada a la nueva variable global
:global human
:local ipv4 [/ip cloud get public-address];
:local ipv6 [/ip cloud get public-address-ipv6];
:local uptime [/system resource get uptime];
:local CurrentTemp [/system health get [find name=temperature] value];
:local FreeMemory ([/system resource get free-memory] / 1024 / 1024);
:local TotalMemory ([/system resource get total-memory] / 1024 / 1024);
:local cpu [/system resource get cpu];
:local cpuCount [/system resource get cpu-count];
:local cpuFrequency [/system resource get cpu-frequency];
:local cpuLoad [/system resource get cpu-load];
:local freeHdd ([/system resource get free-hdd-space] / 1024 / 1024);
:local totalHdd ([/system resource get total-hdd-space] /1024 / 1024);
:local architectureName [/system resource get architecture-name];
:local boardName [/system resource get board-name];
:local version [/system resource get version];
:local DeviceName [/system identity get name];
# nuevas variables
:local txtotal [$human [/interface get [find name=pppoe-out1] tx-byte]];
:local rxtotal [$human [/interface get [find name=pppoe-out1] rx-byte]];
:local sumtotal [$human ([/interface get pppoe-out1 tx-byte]+[/interface get pppoe-out1 rx-byte])];
# START Send Email
/tool e-mail send to="micuenta@gmail.com" from="Mikrotik Despacho" subject="\F0\9F\9A\80 $DeviceName System Status" body="IPv4: $ipv4\nIPv6: $ipv6\n\nTemp: $CurrentTemp C\nUptime: $uptime\nFree Memory: $FreeMemory MB\nTotal Memory: $TotalMemory MB\nCPU: $cpu\nCPU Count: $cpuCount\nCPU Frequency: $cpuFrequency MHz\nCPU Load: $cpuLoad %\nFree Disk: $freeHdd MB\nTotal Disk: $totalHdd MB\nArchitecture: $architectureName\nBoard Name: $boardName\nSoftware Version: $version\n\nConsumo total:\nDescarga: $rxtotal\nSubida: $txtotal\nTotal: $sumtotal"
# END Send Email
# START Send Telegram Module
:local MessageText "\F0\9F\9A\80 $DeviceName System Status:%0AIPv4: $ipv4%0AIPv6: $ipv6%0ATemperature: $CurrentTemp %C2%B0 C%0AUptime: $uptime%0AFree Memory: $FreeMemory MB%0ATotal Memory: $TotalMemory MB%0ACPU Load: $cpuLoad %%0ACPU: $cpu%0ACPU Count: $cpuCount%0ACPU Frequency: $cpuFrequency MHz%0AArchitecture: $architectureName%0ABoard Name: $boardName%0ASoftware Version: $version%0AFree Disk: $freeHdd MB%0ATotal Disk: $totalHdd MB%0A----%0A<b><i>Consumo total:</i></b>%0ADescarga: $rxtotal%0ASubida: $txtotal%0ATotal: $sumtotal";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module
:log info "Sent Email: WAN IP & System Status"
:log info "Sent Telegram: WAN IP & System Status"
Así quedaría, como veis las unidades las ha traducido para su comprensión, como lo haría Winbox.
Ver el adjunto 91527 Ver el adjunto 91530
Gracias a
@jerogabe por su aportación.
S@lu2.