Zachycení zvýšeného pingu do souboru

Kyblík

Zachycení zvýšeného pingu do souboru
« kdy: 31. 08. 2016, 00:22:07 »
Zdravím,
chtěl bych poprosit, jestli by mi někdo nepomohl upravit můj script pro testování pingu v shellu Debianu.
Potřebuju zachytit do souboru ping větší než X, třeba 30ms. Tu řádku jsem nějak dal dohromady, ale testování velikosti a následně zápis do souboru je už asi nad moje programovací schopnosti, pač je to už dávno, co jsem něco naprogramoval.
Kód: [Vybrat]
ping -c 500 -s 1024 www.six.sk > /var/log/ping/www.six.sk-ping &Uvedený řádek udělá 500 pingů a vše zapíše do souboru.
Já ale potřebuju pustit ping třeba na 10 hodin a zapsat jen hodnoty vetší než X.
Pokud by někdo byl ochoten ušetřit mě hodiny studování programování v shellu, byl bych mu moc vděčen.



stpd

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #1 kdy: 31. 08. 2016, 01:29:53 »
Zdravím, skúsil som niečo narýchlo napísať. Niesom síce expert na bash, ale fungovať by to malo.

Kód: [Vybrat]
#!/bin/bash

hours=10        # 10 hodin
max_value=30    # 30 ms

end=$((`date +%s` + 3600 * $hours))

while [[ "`date +%s`" -lt "$end" ]]; do
    line=`ping -c 1 -s 1024 www.six.sk | sed -n '2p'`
    value=`echo "$line" | awk {'print $8'} | cut -d= -f2`
   
    if [[ "`echo "$value > $max_value" | bc -l`" -eq 1 ]]; then
        echo $line >> /var/log/ping/www.six.sk-ping
    fi 

    sleep 1
done

nobody(ten pravej)

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #2 kdy: 31. 08. 2016, 02:20:22 »
pokud jde jen o nezobrazeni radek pingu s time <=30ms, tak treba jen pridat grep, parametr -v zapina inverzi, prvni time je pro rozsah 0-9ms, druhej time pro 10-30ms, tecka znamena jakejkoliv znak, \tecka znamena regulerni tecku..
Kód: [Vybrat]
ping -c 500 -s 1024 www.six.sk | grep -v -e 'time=[0-9]\.' -e 'time=[1-3].\.' > /var/log/ping/www.six.sk-ping &

Kyblík

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #3 kdy: 31. 08. 2016, 07:02:29 »
Tisíceré díky pánové, něco jako napsal stpd jsem zkoušel polepit, ale s těmi chabými zvyšky basicu bych to určo nedal.
Myslel jsem, že to v shellu bude něco jako napsal nobody(ten pravej) a ejhle, hned tady mám oba způsoby, to jsem ani ve su nedoufal, jdu to hned hodit na ten moji samba krabičku a postuduju.
Ještě jednou díky.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Zachycení zvýšeného pingu do souboru
« Odpověď #4 kdy: 31. 08. 2016, 07:18:02 »
Jen malý detail...
Kód: [Vybrat]
-e 'time=[1-3].\.'odpovídá rozsahu od 10.0 až po 39.9 takže 1-2 bude asi lepší s tím, že rovných 30 už bude moc, nebo přidat podmínku ještě na rovných 30.0


itexpert

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #5 kdy: 31. 08. 2016, 08:04:21 »
Od toho tu mame tcpdump (pro sber dat do pcap souboru) a wireshark (pro pozdejsi analyzu).

Kyblík

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #6 kdy: 31. 08. 2016, 08:08:21 »
Prozatím jsem zkoušel script od stpd, no a je tam nějakej zádrhel. Po spuštění bash vypíše tohle:
Kód: [Vybrat]
root@debian:/usr/local/bin# ./ping_test_If_then
./ping_test_If_then: 19: ./ping_test_If_then: [[: not found
V editoru jsou v řádcích:
Kód: [Vybrat]
line=`ping -c 1 -s 1024 www.six.sk | sed -n '2p'`
    value=`echo "$line" | awk {'print $8'} | cut -d= -f2`
červeně vysvíceny apostrofy a text mezi nima má černé pozadí proti modrému u ostatního textu.
Tak teď studuju, co dělají apostrofy, neboř to vypadá, že je chyba v nich.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Zachycení zvýšeného pingu do souboru
« Odpověď #7 kdy: 31. 08. 2016, 08:46:41 »
Dovolil bych si nabidnout jeste jeden narychlo sesmoleny skript highping.sh:

Kód: [Vybrat]
#!/bin/bash
if [ $# -lt 2 ]; then
    echo "Spatna syntaxe - highping.sh <hostname> <maxtime> [dalsi parametry pro ping]"
    exit 1
fi
checknum="^[0-9]+(.[0-9]+)?$"
if ! [[ $2 =~ $checknum ]] ; then
    echo "Spatna syntaxe - highping.sh <hostname> <maxtime> [dalsi parametry pro ping]"
    echo "<maxtime> musi byt cislo";
    exit 1
fi
ping $1 "${@:3}" | awk -v time=$2 -F 'time=| ms' '{if (length($2) == 0) print $0; else if ($2>time) print $0}'

Jako prvni parametr to chce jmeno serveru, druhy je cas v ms - pokud je ping vetsi nez cas, vypise ho to a volitelne dalsi parametry jsou predany pingu, takze napriklad
Kód: [Vybrat]
./highping.sh www.six.sk 15 -i 0.1pinga na www.six.sk s intervalem 0.1sec a vypisuje ping vetsi, nez 15ms

jeste doplnim, cislo muze byt i desetinne
« Poslední změna: 31. 08. 2016, 08:50:24 od Tuxik »

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Zachycení zvýšeného pingu do souboru
« Odpověď #8 kdy: 31. 08. 2016, 09:06:16 »
A jeste bych ten radek s pingem upravil
Kód: [Vybrat]
ping $1 "${@:3}" | awk -v stamp=$(date +%s) -v time=$2 -F 'time=| ms' '{if (length($2) == 0) print strftime("%s")" "$0; else
 if ($2>time) print strftime("%s")" "$0}'

cimz se na zacatek kazdeho radku pripise timestamp, aby log k necemu byl.

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #9 kdy: 31. 08. 2016, 10:00:51 »
Dufam, ze to nejde cez wifi. To by chcelo potom pingat nieco ine ako six.sk

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #10 kdy: 31. 08. 2016, 10:53:37 »
Tuxik: co konkretne robi toto "${@:3}" v tom poslednom riadku? Dakujem

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Zachycení zvýšeného pingu do souboru
« Odpověď #11 kdy: 31. 08. 2016, 11:08:23 »
Tuxik: co konkretne robi toto "${@:3}" v tom poslednom riadku? Dakujem
předá všechny parametry skriptu od třetího dál. Například při zavolání skriptu s parametry

Kód: [Vybrat]
./skript.sh par1 par2 par3 par4 par5
to vrátí hodnotu "par3 par4 par5".
Použil jsem to tam pro předání dalších parametrů přímo příkazu ping, kdyby byly potřeba.

stpd

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #12 kdy: 31. 08. 2016, 12:50:50 »
Kyblík, ten problém zrejme nieje v apostrofoch, ale v zátvorkách. Skús vymeniť [[ ... ]] za klasické [ ... ] (v tom if-e a while), potom by to už malo fungovať.

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #13 kdy: 31. 08. 2016, 21:03:18 »
Jelikoz neco podobneho budu brzy potrebovat, tak jsem to napsal uz ted. Verim, ze tento mustr bude stacit na to dodelat si logiku podle sveho.

Testovano Debian a Slackware, ping ma docela stabilni format.

pingMonitoring.sh
Kód: [Vybrat]
#!/bin/bash

HOST="seznam.cz"
COUNT=100
LEVEL=4

echo "Monitoring ping for $HOST($COUNT times)"

IFS=" " ping -c $COUNT $HOST | grep --line-buffered 'time=' | \
while read -r aLEN aD aD aHOST aIP aSEQ aTTL aTIME aTIMEUNIT
do
    IFS="= " read -r aD TIME <<< $aTIME
    TIME=${TIME%.*} #useknout desetiny, pokud jsou potreba, tak dale bc

    if [ "$TIME" -ge $LEVEL ]; then
        echo "$HOST: $TIME $aTIMEUNIT - Pisu si te..."
    else
        echo "$HOST: $TIME $aTIMEUNIT- Zde je svet jeste v poradku"
    fi
done

e3k

Re:Zachycení zvýšeného pingu do souboru
« Odpověď #14 kdy: 31. 08. 2016, 21:18:06 »
co tak pouzit https://www.nagios.org/downloads/nagios-plugins/ konkretne check_ping. nemusis kvoli tomu instalovat cely nagios staci pouzit ten jeden konkretny plugin. cez parametre nastavis hranicu co neni oka a v pripade exit codu != 0 to budes pisat dalej.