Portál AbcLinuxu, 2. května 2025 07:20
Jelikož provozuji několik serverů a rozsáhlejších sítí, hledal jsem nástroj který by mě (dříve než nespokojení klienti) informoval o výpadku zařízení, pár hotových nástrojů/skriptů jsem našel, ale žádný nesplňoval všechny moje požadavky:
napsal jsem tedy skriptík který tyto požadavky splňuje, v mém případě je spouštěn po 5ti minutách z cronu a funguje na výbornou.
Rád se o něj podělím a uvítám jakákoli vylepšení.
#!/bin/bash
# skript pro ping monitorovani zasilajici info pouze pri zmene stavu
# autor: Habr <habr@pinda.cz>
# soubor s adresama pro sledovani je ve formatu "adresa;popis" (po radcich)
################### KONFIGURACE ##########################################
# pracovni adresar
WORK_DIR=/home/habr/netmonitor/
# pocet pingu za sebou bez odpovedi aby byl nahlasen vypadek
PING_COUNT=10
# casove rozmezi pingu (vteriny)
PING_INTERVAL=3
# maximalni doba odezvy (vteriny)
PING_TIMEOUT=1
# adresar se status soubory
STATUS_DIR=./status/
# konfiguracni soubor s adresama pro sledovani
ADDRESS_FILE=adresy.txt
##########################################################################
# existence pracovniho adresare
if [ ! -d "$WORK_DIR" ] ; then
echo "Nenalezen pracovni adresar"
exit 1
fi
cd "$WORK_DIR"
# test na konfiguracni soubor
if [ ! -f "$ADDRESS_FILE" ] ; then
echo "Nenalezen soubor s adresama"
exit 1
fi
while read radek; do
# rozlozeni radku z konfiguracniho souboru
ADRESA=`echo "$radek" | awk -F";" '{print $1}'`
POPIS=`echo "$radek" | awk -F";" '{print $2}'`
# nejpodstatnejsi vec - ping - prvne zkusime jeden rychlej aby to cely netrvalo tak dlouho
STATUS=`ping -c 1 -W $PING_TIMEOUT $ADRESA | grep "0 received" | wc -l`
# pokud jeden neprosel, presvedci se zda opravdu vypadlo nebo se jen ztratil paket
if [ "$STATUS" == "1" ] ; then
STATUS=`ping -c $PING_COUNT -i $PING_INTERVAL -W $PING_TIMEOUT $ADRESA | grep "0 received" | wc -l`
fi
STATUS_FILE="$STATUS_DIR/$ADRESA.status"
# test esli existuje adresar pro soubory se statusem popr. vytvoreni
if [ ! -d "$STATUS_DIR" ] ; then
mkdir "$STATUS_DIR"
fi
# vytvoreni neexistujicich status souboru u novych adres
if [ ! -f "$STATUS_FILE" ] ; then
echo -n "$STATUS" > $STATUS_FILE
fi
# test zmeny stavu
if [ "$STATUS" != "`cat $STATUS_FILE`" ] ; then
# naskocil/vypad
if [ "$STATUS" == "0" ] ; then
ZMENY="${ZMENY}${POPIS}: JIZ FUNKCNI \n"
else
ZMENY="${ZMENY}${POPIS}: VYPADEK \n"
fi
echo -n "$STATUS" > $STATUS_FILE
fi
done < "$ADDRESS_FILE"
# kdyz se neco zmenilo provede se dana akce, popis je v promenne $ZMENY
if [ -n "$ZMENY" ] ; then
MSG=`echo -n -e "NetMonitor - probehly nasledujici zmeny stavu:\n\n$ZMENY"`
# tohle pouzivam ja pro odeslani pres privatni SMS branu,
# lze pouzit napr. echo "$MSG" | mail -s "Net Monitor" vase@adresa.cz
php sms.php "$MSG"
fi
Tiskni
Sdílej:
jenze casem stejne zjisti ze by potreboval nejakou spravu tech hostu, historii, reporty, statistiky, vic uzivatelu ...
Uvídím časem, zatím jsem potřebu nepocítil.
pokud se bavime o dejme tomu male firme 5 stroju v kanclu a jeden server tak to beru. ale nekolik serveru a rozsahlejsich siti pak jednorazova investice do konfigurace neceho jako nagios vyjde radove priblizne stejne jako takovyto jednorazovy skript ale moznosti, vystupy jsou uplne nekde jinde
Co se týče serverových služeb používám monitoring-serveru.cz, tohle používám primárně uvnitř sítě, na servery venku jen tak "orientačně".
nehlede na to ze to ze stroj pinga jeste neznamena ze reaguje na cokoliv jineho
Samozřejmě se mě mnohokrát stalo že stroj odpovídal na ICMP ale nic jiného, nicméně "pingám" na mnoho zařízení v síti, tzn. pokud je odezva z nejposlednějšího, je velmi pravděpodobné že všechny po cestě fungují OK.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.