Navazuji na snad oblíbený script na sledování stavu serverů a odesílání stavu na mail (SMS).

Dlouholetá praxe ukázala nedostatky a ty se postupně pilovaly.

Napsal jsem něco jako verzi 3, která je trochu revolucí. Náměty z předchozí diskuze daly vzejít novému pohledu na problematiku.

Jako problémy se ukázalo:

1,Nepohodlné přidávání serverů

2, sekvenční zpracování, tedy postupné testovaní serverů což u většího počtu serverů natahovalo čas zpracování a přinášelo komplikace.

Nové řešení

Jako největší problém se ukázalo „paralelní puštění“ testu. MT nic takového neumí. Proto jsem napsal skript, který vyrobí jednotlivé skripty pro testování a ty pouští najednou. Každou lichou minutu se tak testují servery a každou sudou se vyhodnocují výsledky testu. Důvodem následného vyhodnocení je odeslání jedné zprávy při výpadku větší části sítě.

Bylo zde zachováno dvoustavové vyhodnocení informace o nedostupnosti, tedy pakliže nedojde ani jeden ping z pěti 1. minutu změní se stav z 0 (dostupný) na 1 (možná nedostupný) a pakliže v následujícím testu (u nás 3. minuta) zase nedojde žádný z 5 pěti pingů dojde k odeslání zprávy.

IP serverů se zadávají do address listu „IPTest“ a je potřeba vyplnit comment – to je textová identifikace serveru pro odesílání zprávy.

Požadavky a rizika:

1, žádný jiný skript se nesmí jmenovat „IPTest*“ (cokoliv začínající IPTest). Při tvorbě skriptů dojde k vymazání všech scriptů takto začínajících.

2, IP hlídaných serverů vkládejte do address listu IPTest. Nedostupné servery se v tomto listu disableují, ale i tak jsou hlídané. Je to z důvodu nastavování „počátečního“ stavu proměnných. Toto je pro případ dlouhodobě nedostupného serveru pro to aby při generování nových skriptů nedošlo k novému hlášení nedostupnosti serveru. Pakliže server nechcete hlídat, musíte jej úplně vymazat nebo přesunout do jiného listu

3, Nechte pojmenované scripty tak, jak to mám já, nebudete pak komplikovaně upravovat návaznost těchto skriptů:

Scripty pro verzi 3.x

CheckIPTest

Pouští se každou sudou minutu a odesílá případné hlášení

:local email tvujemail@t-email.cz

:global IPTestStatusDown

:global IPTestStatusUp

:if ($IPTestStatusDown!="") do={

/tool e-mail send to=$email subject=("Cas: " . [/system clock get time]) body=(" DOWN:".$IPTestStatusDown)

:set IPTestStatusDown ""

}

:if ($IPTestStatusUp!="") do={

/tool e-mail send to=$email subject=("Cas: " . [/system clock get time]) body=(" UP:".$IPTestStatusUp)

:set IPTestStatusUp ""

}

kod pro zavedení do scheduleru:

/system scheduler add comment="" disabled=no interval=2m name=CheckIPTest on-event=CheckIPTest start-date=jan/01/1970 start-time=00:00:00

MakeScripts

Vyrábí jednotlivé testovací scripty, zaváděcí script a nastavuje scheduler pro pouštění testovacích scriptů

:local ip

:local com

:local counter

:local initscript

:global IPTestName

:set IPTestName ""

:set counter 0

:foreach i in=[/system script find] do={

:if ([:find [/system script get $i name] "IPTest"]=0) do={

/system script remove $i

}

}

:foreach i in=[/system scheduler find] do={

:if ([:find [/system scheduler get $i name] "IPTest"]=0) do={

/system scheduler remove $i

}

}

:foreach i in=[/ip firewall address-list find list=IPTest] do={

:set ip [/ip firewall address-list get $i address]

:set com [/ip firewall address-list get $i comment]

:set initscript ($initscript.":global IPTest".$counter."\r\n")

:if [/ip firewall address-list get $i disabled] do={:set initscript ($initscript.":set IPTest".$counter." 2\r\n") }

/system script add name=("IPTest".$counter) policy=ftp,write,read,test,winbox source=("#Testuje server ".$com.", IP ".$ip."\r\n:global IPTest".$counter."\r\n:global IPTestStatusDown\r\n:global IPTestStatusUp\r\n\r\n:if ([/ping ".$ip." count=5] = 0) do={\r\n :if (\$IPTest".$counter." = 1) do={\r\n :set IPTest".$counter." 2\r\n :set IPTestStatusDown (\$IPTestStatusDown . \"".$com.", \")\r\n :foreach i in=[/ip firewall address-list find list=IPTest comment=".$com."] do={/ip firewall address-list disable \$i}\r\n }\r\n :if (\$IPTest".$counter." = 0) do={:set IPTest".$counter." 1}\r\n } else={\r\n :if (\$IPTest".$counter." = 2) do={\r\n :set IPTestStatusUp (\$IPTestStatusUp . \"".$com.", \") \r\n :foreach i in=[/ip firewall address-list find list=IPTest comment=".$com."] do={/ip firewall address-list enable \$i}\r\n }\r\n :set IPTest".$counter." 0\r\n }\r\n}")

/system scheduler add name=("IPTest".$counter) start-time=0:1:0 interval=0:2:0 on-event=("IPTest".$counter)

:set IPTestName ($IPTestName.",".$com)

:set counter ($counter+1)

}

/system script add name=IPTestInit policy=ftp,write,read,test,winbox source=($initscript)

/system script run IPTestInit

/system script remove IPTestInit

Přidání adres pro testování:

/ip firewall address-list add address=1.1.1.1 comment=Test1 disabled=no list=IPTest

/ip firewall address-list add address=2.2.2.2 comment=Test2 disabled=no list=IPTest

Po zadání IP adres je potřeba pustit script MakeScripts

/system script run MakeScripts

Celý kód pro nahrání do MT (CTRL+C -> CTRL+V):

/system script add name=MakeScripts policy=ftp,read,write,policy,test,winbox source=":local ip\r\

\n:local com\r\

\n:local counter\r\

\n:local initscript\r\

\n\r\

\n:global IPTestName\r\

\n\r\

\n:set IPTestName \"\"\r\

\n:set counter 0\r\

\n\r\

\n:foreach i in=[/system script find] do={\r\

\n:if ([:find [/system script get \$i name] \"IPTest\"]=0) do={\r\

\n /system script remove \$i\r\

\n }\r\

\n} \r\

\n\r\

\n:foreach i in=[/system scheduler find] do={\r\

\n:if ([:find [/system scheduler get \$i name] \"IPTest\"]=0) do={\r\

\n /system scheduler remove \$i\r\

\n }\r\

\n} \r\

\n\r\

\n:foreach i in=[/ip firewall address-list find list=IPTest] do={\r\

\n :set ip [/ip firewall address-list get \$i address]\r\

\n :set com [/ip firewall address-list get \$i comment]\r\

\n :set initscript (\$initscript.\":global IPTest\".\$counter.\"\\r\\n\

\")\r\

\n :if [/ip firewall address-list get \$i disabled] do={:set initscript (\$initscript.\":set IPTest\".\$counter.\" 2\\r\\n\") }\r\

\n /system script add name=(\"IPTest\".\$counter) policy=ftp,write,read,test,winbox source=(\"#Testuje server \".\$com.\", IP \".\$ip.\"\\r\\n:global IPTest\".\$counter.\"\\r\\n:global IPTestStatusDown\\r\\n:global IPTestStatusUp\\r\\n\\r\\n:if ([/ping \".\$ip.\" count=5] = 0) do={\\r\\n \

:if (\\\$IPTest\".\$counter.\" = 1) do={\\r\\n :set IPTest\".\$counter.\" 2\\r\\n :set IPTestStatusDown (\\\$IPTestStatusDown . \\\"\".\$com.\", \\\")\\r\\n :foreach i in=[/ip firewall address-list find list=IPTest comment=\".\$com.\"] do={/ip firewall address-list disable \\\

\$i}\\r\\n }\\r\\n :if (\\\$IPTest\".\$counter.\" = 0) do={:set IPTest\".\$counter.\" 1}\\r\\n } else={\\r\\n :if (\\\$IPTest\".\$counter.\" = 2) do={\\r\\n :set IPTestStatusUp (\\\$IPTestStatusUp . \\\

\"\".\$com.\", \\\") \\r\\n :foreach i in=[/ip firewall address-list find list=IPTest comment=\".\$com.\"] do={/ip firewall address-list enable \\\$i}\\r\\n }\\r\\n :set IPTest\".\$counter.\" 0\\r\\n }\\r\\\

n}\")\r\

\n /system scheduler add name=(\"IPTest\".\$counter) start-time=0:1:0 interval=0:2:0 on-event=(\"IPTest\".\$counter)\r\

\n :set IPTestName (\$IPTestName.\",\".\$com)\r\

\n :set counter (\$counter+1)\r\

\n}\r\

\n/system script add name=IPTestInit policy=ftp,write,read,test,winbox source=(\$initscript)\r\

\n/system script run IPTestInit\r\

\n/system script remove IPTestInit\r\

\n\r\

\n"

/system script add name=CheckIPTest policy=ftp,read,write,test,winbox,sniff source=":local email tvujemail@t-email.cz\r\

\n\r\

\n:global IPTestStatusDown\r\

\n:global IPTestStatusUp\r\

\n\r\

\n:if (\$IPTestStatusDown!=\"\") do={\r\

\n /tool e-mail send to=\$email subject=(\"Cas: \" . [/system clock get time]) body=(\" DOWN:\".\$IPTestStatusDown)\r\

\n :set IPTestStatusDown \"\"\r\

\n}\r\

\n\r\

\n:if (\$IPTestStatusUp!=\"\") do={\r\

\n /tool e-mail send to=\$email subject=(\"Cas: \" . [/system clock get time]) body=(\" UP:\".\$IPTestStatusUp)\r\

\n :set IPTestStatusUp \"\"\r\

\n}\r\

\n"

/system scheduler add comment="" disabled=no interval=2m name=CheckIPTest on-event=CheckIPTest start-date=jan/01/1970 start-time=00:00:00

/ip firewall address-list add address=1.1.1.1 comment=Test1 disabled=no list=IPTest

/ip firewall address-list add address=2.2.2.2 comment=Test2 disabled=no list=IPTest

/system script run MakeScripts

Pakliže namáte nastavený server pro odesálání mailů nazapomeňte na:

/tool e-mail set server=1.1.1.1 from=mujserver@domena.cz

Očekávám zprávy typu "proč mi tohle nejde ...", ale uznání taky potěší. Osobně mám dobrý pocit výtězství ducha nad hmotou

Diky! Funguje. : Ses dobrej 8)

Přesně tak jsem to potřeboval

Ahoj, je to superka, ale mám s tím jeden problémek:

Mám RouterOS 3.10 verzi.

Nahrnu to tam CTRL C, CTRL V

Dám si tam nějakou IP adresu do adress listu, pojmenuju si jednoduše třeba "vesnice", vygeneruju script pomoci Makescripts.

Všechno zdá se v pořádku, začne to pěkně hlídat, na zkoušeku tu IP adresu vypnu, když proběhne script IPtest0, disable se poprvé ještě nedá do adress listu, po druhé co proběhne ten script se už disabletuje a za minutku pošle SMS.. To je v pořádku po několika minutách vypnuté IP už žádná SMS nepřijde, ale poté co zapnu tu IP, tak už si znova IP nedá enable, je furt disable a každou minutu mi přijde SMS že už je ta daná IP UP... ale enable se nedá.

Nestalo se Vám to třeba? Díky za odpověď

o 9 dní později

Ahoj, je to superka, ale mám s tím jeden problémek:

Mám RouterOS 3.10 verzi.

Nahrnu to tam CTRL C, CTRL V

Dám si tam nějakou IP adresu do adress listu, pojmenuju si jednoduše třeba "vesnice", vygeneruju script pomoci Makescripts.

Všechno zdá se v pořádku, začne to pěkně hlídat, na zkoušeku tu IP adresu vypnu, když proběhne script IPtest0, disable se poprvé ještě nedá do adress listu, po druhé co proběhne ten script se už disabletuje a za minutku pošle SMS.. To je v pořádku po několika minutách vypnuté IP už žádná SMS nepřijde, ale poté co zapnu tu IP, tak už si znova IP nedá enable, je furt disable a každou minutu mi přijde SMS že už je ta daná IP UP... ale enable se nedá.

Nestalo se Vám to třeba? Díky za odpověď

Nemam nic takového hlášené, ale zkus pustit ten script CheckIPTest z příkazové žádky a uvidíš. Jestli tam není nějaký problém s právy .... nevím ...

o 6 dní později

Ahoj, je to superka, ale mám s tím jeden problémek:

Mám RouterOS 3.10 verzi.

Nahrnu to tam CTRL C, CTRL V

Dám si tam nějakou IP adresu do adress listu, pojmenuju si jednoduše třeba "vesnice", vygeneruju script pomoci Makescripts.

Všechno zdá se v pořádku, začne to pěkně hlídat, na zkoušeku tu IP adresu vypnu, když proběhne script IPtest0, disable se poprvé ještě nedá do adress listu, po druhé co proběhne ten script se už disabletuje a za minutku pošle SMS.. To je v pořádku po několika minutách vypnuté IP už žádná SMS nepřijde, ale poté co zapnu tu IP, tak už si znova IP nedá enable, je furt disable a každou minutu mi přijde SMS že už je ta daná IP UP... ale enable se nedá.

Nestalo se Vám to třeba? Díky za odpověď

Nemam nic takového hlášené, ale zkus pustit ten script CheckIPTest z příkazové žádky a uvidíš. Jestli tam není nějaký problém s právy .... nevím ...

Ahoj, musim potvrdit stejny problem, enable nemaka. ROS v3.10

Ahoj, musim potvrdit stejny problem, enable nemaka. ROS v3.10

Nedalo mi to, a hledal jsem chybu... takze:

ve scriptu MakeScripts:

radka 28, znak 795 - chybi mezera, logicky se pak neprovede enable (address-listfind -> address-list find)

radka 28, znak 922 - zda se mi, ze je tam nadbytecna jedna slozena zavorka, ale pri testech to nevadilo ( 0\r\n }\r\n}") -> 0\r\n }") )

jinak super prace, jdu to dal testovat a nasadit na RB, dik

ANO, máte pravdu. Export MT není dokonalý a chyběla tam mezera. JE TO OPRAVENE. Děkuji

si dobry, funguje to, aj ked to nemam este odtestovane za vsetkych podmienok, len tak dalej

o 25 dní později

Zdravím všechny, koukám že to tady všem ůspěšně funguje. U mě se bohužel vyskytuje nějaký problém. Zkoušel jsem to na ruzných strojích a na každém se to chová trochu jinak. Na jednom po vložení hlídaných ip a vygenerování skriptů, se nedostupný server vůbec nedisabluje a tímpádem ani neodešle mail. Na druhém třeba vše funguje spravně, UP i DOWN, ale jakmile přidám nové IP, které vím že není a vygeneruji scripty, tak se opět nic neděje a je stále online. Dále mi nastal i případ kdy se ip disableovalo, odešel mail DOWN, ale UP už ne. Scripty jsem použil již ty opravené. Kdyby jste měl někdo nějakou radu co zkontrolovat nebo zkusit, byl bych rád.

Zdravím všechny, koukám že to tady všem ůspěšně funguje. U mě se bohužel vyskytuje nějaký problém. Zkoušel jsem to na ruzných strojích a na každém se to chová trochu jinak. Na jednom po vložení hlídaných ip a vygenerování skriptů, se nedostupný server vůbec nedisabluje a tímpádem ani neodešle mail. Na druhém třeba vše funguje spravně, UP i DOWN, ale jakmile přidám nové IP, které vím že není a vygeneruji scripty, tak se opět nic neděje a je stále online. Dále mi nastal i případ kdy se ip disableovalo, odešel mail DOWN, ale UP už ne. Scripty jsem použil již ty opravené. Kdyby jste měl někdo nějakou radu co zkontrolovat nebo zkusit, byl bych rád.

Problémů si popsal dost. Jeden hlavní ti asi osvětlí test pingu přémo z MT, on se ti nekdy "vrátí" ping, ale od mačiny blíž k tobě s popisem, že host je nedostupný. Ještě na to juknu, určitě to pude "doladit"

o 4 dny později

jojo, ten ping jsem zkoušel a říkal jsem si že tam asi bude problém.

o 22 dní později

Mám otazočku trošku mimo temy... Vedel by si spravit aj skript kt. spracuje priemej 10 pingov a spavu zobrazi v logu?? Ono mozno malina pre teba ale celkom sa s tym trapim... MT robi tento priemer vzdy automaticky po skonceni pingovania ale ako nasledne vypisat ten tex do logu a nie na obrazovku. Nejaky nápad? Dakujem za odpoved.

o 4 dny později

ANO, máte pravdu. Export MT není dokonalý a chyběla tam mezera. JE TO OPRAVENE. Děkuji

napiste prosim na akej verzi vam to funfuje na 100 percent mne to ide nahodne na 3.13 a na 3.11 sa vypla iba jedna ip z dvoch aj ked som vypol vsetky ip Aku verziu tam nasadit ak sa da prilozte funkcny script

dakujem

Mám otazočku trošku mimo temy... Vedel by si spravit aj skript kt. spracuje priemej 10 pingov a spavu zobrazi v logu?? Ono mozno malina pre teba ale celkom sa s tym trapim... MT robi tento priemer vzdy automaticky po skonceni pingovania ale ako nasledne vypisat ten tex do logu a nie na obrazovku. Nejaky nápad? Dakujem za odpoved.

Tak zatím se trápím stejným problémem a asi to nejde :( ... teda zatím jsem to nerozlomil a to zkouším plno "nesmyslů", protože ze scriptu opravdu ty hodnoty nevytáhneš :(. Jakmile něco vymyslim, dam vedet.

o rok později

ja to mam nahodene na RB 433 s fw 3.30 a facha to v pohode...ale len ked tam mam jednu ip na sledovanie...akonahle tam pridam dalsiu...a cez "/system script run MakeScripts" pridam dalsiu ip do sledovania tak ma to ma v pazi....pridat to sice vsetko prida...ale ziadny mail nedojde... :((

ale s jednou ip to chodi uplne super! velka vdaka zatial!

o měsíc později

zaujmala by ma moznost ako odoslat email notif. na viacej adries...ako to zadefinovat, dik :)

o 2 měsíce později

Posílání na více mailů jsem vyřešil:

:local mail; :set mail [:toarray 1@1.cz,2@2.cz,3@3.cz]; :foreach i in $mail do {/tool e-mail send to="$i" subject=("...")

o 3 měsíce později

Posílání na více mailů jsem vyřešil:

:local mail; :set mail [:toarray 1@1.cz,2@2.cz,3@3.cz]; :foreach i in $mail do {/tool e-mail send to="$i" subject=("...")

Ahoj, zaujala mne varianta posílání na více emajlů, ale toto řešení nepošle mail žádný, je to opravdu spávně? Jinak děkuji moc za suprové řešení hlídání stavu, funguje to dokonale i na verzi 4.11, jen bych poprosil o radu, jak přesně tuto úpravu na posílaní více majliků spávně do sriptu zakomponovat.

o měsíc později

Ahoj TweetyLBC

Pouzivam jis delsi dobu tvuj script na montoring. Moooc se osvecil ale prave jsem narazil na 2 veci ktere by nebylo na skodu do scriptu dodat.

1. to jis vyse zminovane odesilani na 2a vice emailovich addr

2. v pripade off ci on provest zaznam do logu

Dik moc.

📡 Telekomunikace.cz