[Mikrotik] Script Monitorización errores Interfaces

Este script sirve para que nos notifique cuando los interfaces ha tenido más de X errores de TX o RX en un periodo de tiempo.

Está diseñado para un CCR1036, pero lógicamente se puede adaptar a cualquier otro modelo.

Lo que hace es crear una variable con los errores que tiene cada interface y lo almacena. Tenemos que configurar un scheduler para que se ejecute cada X tiempo. Si la diferencia entre el valor de ahora y el antiguo es superior a lo establecido en la variable máximo permitido nos mandará un correo.
Acordarse de cambiar la dirección de correo que está implementada a fuego en el código como variable al principio del código.

######
######         Script para el gestionar el estado de los
######         interfaces. Controla tanto los errores de
######         TX como RX y si varian mas de lo indicado
######         en maximo permitido, lo manda la a direccion
######         de correo que pongais.
######
######                     www.alferez.es
######

       :local maximopertimido 5
       :local correo "MICORREO@GMAIL.COM";

       :global erroresrxsfp1;
       :global erroresrxsfp2;
       :global erroresrxeth1;
       :global erroresrxeth2;
       :global erroresrxeth3;
       :global erroresrxeth4;
       :global erroresrxeth5;
       :global erroresrxeth6;
       :global erroresrxeth7;
       :global erroresrxeth8;

       :global errorestxsfp1;
       :global errorestxsfp2;
       :global errorestxeth1;
       :global errorestxeth2;
       :global errorestxeth3;
       :global errorestxeth4;
       :global errorestxeth5;
       :global errorestxeth6;
       :global errorestxeth7;
       :global errorestxeth8;

       :local erroresnuevosrxsfp1 [/interface ethernet get [ find default-name=sfp-sfpplus1 ] rx-fcs-error];
       :local erroresnuevosrxsfp2 [/interface ethernet get [ find default-name=sfp-sfpplus2 ] rx-fcs-error];
       :local erroresnuevosrxeth1 [/interface ethernet get [ find default-name=ether1 ] rx-fcs-error];
       :local erroresnuevosrxeth2 [/interface ethernet get [ find default-name=ether2 ] rx-fcs-error];
       :local erroresnuevosrxeth3 [/interface ethernet get [ find default-name=ether3 ] rx-fcs-error];
       :local erroresnuevosrxeth4 [/interface ethernet get [ find default-name=ether4 ] rx-fcs-error];
       :local erroresnuevosrxeth5 [/interface ethernet get [ find default-name=ether5 ] rx-fcs-error];
       :local erroresnuevosrxeth6 [/interface ethernet get [ find default-name=ether6 ] rx-fcs-error];
       :local erroresnuevosrxeth7 [/interface ethernet get [ find default-name=ether7 ] rx-fcs-error];
       :local erroresnuevosrxeth8 [/interface ethernet get [ find default-name=ether8 ] rx-fcs-error];

       :local erroresnuevostxsfp1 [/interface ethernet get [ find default-name=sfp-sfpplus1 ] tx-fcs-error];
       :local erroresnuevostxsfp2 [/interface ethernet get [ find default-name=sfp-sfpplus2 ] tx-fcs-error];
       :local erroresnuevostxeth1 [/interface ethernet get [ find default-name=ether1 ] tx-fcs-error];
       :local erroresnuevostxeth2 [/interface ethernet get [ find default-name=ether2 ] tx-fcs-error];
       :local erroresnuevostxeth3 [/interface ethernet get [ find default-name=ether3 ] tx-fcs-error];
       :local erroresnuevostxeth4 [/interface ethernet get [ find default-name=ether4 ] tx-fcs-error];
       :local erroresnuevostxeth5 [/interface ethernet get [ find default-name=ether5 ] tx-fcs-error];
       :local erroresnuevostxeth6 [/interface ethernet get [ find default-name=ether6 ] tx-fcs-error];
       :local erroresnuevostxeth7 [/interface ethernet get [ find default-name=ether7 ] tx-fcs-error];
       :local erroresnuevostxeth8 [/interface ethernet get [ find default-name=ether8 ] tx-fcs-error];

       if (($erroresrxsfp1-$erroresnuevosrxsfp1 > $maximopertimido) || ($erroresnuevostxsfp1-$errorestxsfp1 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: sfp1 con errores") body="El interface tenia $erroresrxsfp1 errores de RX y ha subido a $erroresnuevosrxsfp1 de RX y $errorestxsfp1 errores de TX y ha subido a $erroresnuevostxsfp1 de TX, revisalo porque esto no pinta nada bien.";
       }

       if (($erroresnuevosrxsfp2-$erroresrxsfp2 > $maximopertimido) || ($erroresnuevostxsfp2-$errorestxsfp2 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: sfp2 con errores") body="El interface tenia $erroresrxsfp2 errores de RX y ha subido a $erroresnuevosrxsfp2 de RX y $errorestxeth8 errores de TX y ha subido a $erroresnuevostxsfp2 de TX, revisalo porque esto no pinta nada bien.";
       }

       if (($erroresnuevosrxeth1-$erroresrxeth1 > $maximopertimido) || ($erroresnuevostxeth1-$errorestxeth1 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth1 con errores") body="El interface tenia $erroresrxeth1 errores de RX y ha subido a $erroresnuevosrxeth1 de RX y $errorestxeth1 errores de TX y ha subido a $erroresnuevostxeth1 de TX, revisalo porque esto no pinta nada bien.";
       }

       if (($erroresnuevosrxeth2-$erroresrxeth2 > $maximopertimido) || ($erroresnuevostxeth2-$errorestxeth2 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth2 con errores") body="El interface tenia $erroresrxeth2 errores de RX y ha subido a $erroresnuevosrxeth2 de RX y $errorestxeth2 errores de TX y ha subido a $erroresnuevostxeth2 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth3-$erroresrxeth3 > $maximopertimido) || ($erroresnuevostxeth3-$errorestxeth3 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth3 con errores") body="El interface tenia $erroresrxeth3 errores de RX y ha subido a $erroresnuevosrxeth3 de RX y $errorestxeth3 errores de TX y ha subido a $erroresnuevostxeth3 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth4-$erroresrxeth4 > $maximopertimido) || ($erroresnuevostxeth4-$errorestxeth4 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth4 con errores") body="El interface tenia $erroresrxeth4 errores de RX y ha subido a $erroresnuevosrxeth4 de RX y $errorestxeth4 errores de TX y ha subido a $erroresnuevostxeth4 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth5-$erroresrxeth5 > $maximopertimido) || ($erroresnuevostxeth5-$errorestxeth5 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth5 con errores") body="El interface tenia $erroresrxeth5 errores de RX y ha subido a $erroresnuevosrxeth5 de RX y $errorestxeth5 errores de TX y ha subido a $erroresnuevostxeth5 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth6-$erroresrxeth6 > $maximopertimido) || ($erroresnuevostxeth6-$errorestxeth6 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth6 con errores") body="El interface tenia $erroresrxeth6 errores de RX y ha subido a $erroresnuevosrxeth6 de RX y $errorestxeth6 errores de TX y ha subido a $erroresnuevostxeth6 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth7-$erroresrxeth7 > $maximopertimido) || ($erroresnuevostxeth7-$errorestxeth7 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth7 con errores") body="El interface tenia $erroresrxeth7 errores de RX y ha subido a $erroresnuevosrxeth7 de RX y $errorestxeth7 errores de TX y ha subido a $erroresnuevostxeth7 de TX, revisalo porque esto no pinta nada bien.";
       }
       if (($erroresnuevosrxeth8-$erroresrxeth8 > $maximopertimido) || ($erroresnuevostxeth8-$errorestxeth8 > $maximopertimido)) do {
       /tool e-mail send to=$correo subject=([/system identity get name]." URGENTE: eth8 con errores") body="El interface tenia $erroresrxeth8 errores de RX y ha subido a $erroresnuevosrxeth8 de RX y $errorestxeth8 errores de TX y ha subido a $erroresnuevostxeth8 de TX, revisalo porque esto no pinta nada bien.";
       }
	   if ((\$erroresnuevosrxeth8-\$erroresrxeth8 > \$maximopertimido) || (\$erroresnuevostxeth8-\$errorestxeth8 > \$maximopertimido)) do {
 

 
       :set erroresrxsfp1 $erroresnuevosrxsfp1;
       :set erroresrxsfp2 $erroresnuevosrxsfp2;
       :set erroresrxeth1 $erroresnuevosrxeth1;
       :set erroresrxeth2 $erroresnuevosrxeth2;
       :set erroresrxeth3 $erroresnuevosrxeth3;
       :set erroresrxeth4 $erroresnuevosrxeth4;
       :set erroresrxeth5 $erroresnuevosrxeth5;
       :set erroresrxeth6 $erroresnuevosrxeth6;
       :set erroresrxeth7 $erroresnuevosrxeth7;
       :set erroresrxeth8 $erroresnuevosrxeth8;

       :set errorestxsfp1 $erroresnuevostxsfp1;
       :set errorestxsfp2 $erroresnuevostxsfp2;
       :set errorestxeth1 $erroresnuevostxeth1;
       :set errorestxeth2 $erroresnuevostxeth2;
       :set errorestxeth3 $erroresnuevostxeth3;
       :set errorestxeth4 $erroresnuevostxeth4;
       :set errorestxeth5 $erroresnuevostxeth5;
       :set errorestxeth6 $erroresnuevostxeth6;
       :set errorestxeth7 $erroresnuevostxeth7;
       :set errorestxeth8 $erroresnuevostxeth8;