Openload til netværkstest

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Openload til netværkstest

Indlæg af Christian.Arvai »

Hej

Vi har en masse problemer med det trådløse netværk på VUC. Som følge af dette er vi blevet bedt om at lave notater om driftsstabiliteten, hvilket vil tage selv os det meste af dagen at lave. Dovenskaben længe leve foreslog jeg, at jeg står for testen, da vi helt sikkert kan lave en sådan løsning her i forum.

Jeg har i forbindelse med test af den nye VPS brugt Openload, hvilket var et fremragende program til formålet. Jeg vil kører:

Kode: Vælg alt

openload 'http://www.google.dk/' 1

men da det jo så vil give konstante ping, vil jeg gerne have kommandoen til kun at forsøge en gang i minuttet, og ellers lave loggen som det plejer.

SP: Hvad skal der tilføjes, for at Openload kun sender 1 forespørgsel i minuttet, og stadigt kun simulere 1 bruger ?
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Openload til netværkstest

Indlæg af NickyThomassen »

Jeg har næsten brugt hele dagen, på ikke at få omdirigering til at virke i Apache, så meget rart med lidt afveksling :)

openload er nok ikke det bedste værktøj til opgaven; ping er (bedre). Koden kopieres bare ind i en fil, og så i terminalen navigeres der til den mappe som filen ligger i, og så køres

Kode: Vælg alt

sh script_navn www.domæne.tld 6

sh betyder at bash skal afvikle filen som et script, lige meget om filen må køres som et program eller ej.
Scriptnavn og domæne siger sig selv, og tallet er hvor mange gange ping skal køres med 10 sekunders pause imellem hver.

Dvs

Kode: Vælg alt

sh script_navn www.aptget.dk 6
ville pinge min dejlige hjemmeside hvert 10 sekund i 1 minut.

Scriptet er

Kode: Vælg alt

#!/bin/bash
clear
if [ "$2" = "" ] ; then
   echo "Adresse eller ønsket antal pings mangler"
   echo "Bruges [sh $0 www.domæne.tld 6]"
   exit 10
fi

URL=$1
ROTATE=$2

while [ "$ROTATE" -ne "0" ] ; do
P=$(ping -c 1 $URL | grep time | awk '{ print $8 }' | grep time)
   if [ "$?" -ne "0" ] ; then
      echo "- Serveren kunne ikke nås -"
      break
   fi

ROTATE=$((ROTATE-1))

echo "Pingede $URL på $P ms. $ROTATE ping mangler"
if [ "$ROTATE" -ne "0" ] ; then
   sleep 10
else
   break
fi
done


Spørgsmål / forslag / forklaringer modtages gerne
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Takker, jeg kigger på det i aften.

PS: Jeg havde regnet ud at der ville komme forslag med scripts, men det er også nemmere at styre :P
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Kan man bygge en tidsangivelse ind for hvert output? ("date" ville være fint).
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Openload til netværkstest

Indlæg af NickyThomassen »

God idé med 'date'. Jeg har også indsat en linie, som (hvis den bliver afkommenteret) logger til en tekstfil.

Kode: Vælg alt

#!/bin/bash
clear
if [ "$2" = "" ] ; then
   echo "Adresse eller ønsket antal pings mangler"
   echo "Bruges [sh $0 www.domæne.tld 6]"
   exit 10
fi

URL=$1
ROTATE=$2

while [ "$ROTATE" -ne "0" ] ; do
P=$(ping -c 1 $URL | grep time | awk '{ print $8 }' | grep time)
   if [ "$?" -ne "0" ] ; then
      echo "- Serveren kunne ikke nås -"
      break
   fi

ROTATE=$((ROTATE-1))
echo "$(date +%k:%M:%S) - Pingede $URL på $P ms. ($ROTATE ping mangler)"

# Hvis det ønskes, så kan der gemmes en kopi af det som terminalen viser i fil.
# Filen vil hedde det samme som scriptet med *.log bagefter, og blive lagt i samme mappe.
# Afkommenter følgende linie hvis det ønske:
#echo "$(date +%k:%M:%S) - Pingede $URL på $P ms." >> "$PWD/$0.log"

if [ "$ROTATE" -ne "0" ] ; then

# Tallet efter 'sleep', bestmmer hvor mange sekunder der ventes imellem hvert ping.
   sleep 10
else
   break
fi
done
exit 0

Scripting er en god måde at løse en opgave på, og sådan et script her kan fx bygges ind i crontab, og pinge en række af sider 1 gang i minuttet, og ved fejl maile en eller anden om det. Som jeg skrev i et anden indlæg
Where there is a shell, there is a way
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Det ser ud til at virke fint:
10:23:14 - Pingede http://www.google.dk på time=44.3 ms.
10:23:24 - Pingede http://www.google.dk på time=43.5 ms.
10:23:34 - Pingede http://www.google.dk på time=43.6 ms.
10:23:45 - Pingede http://www.google.dk på time=45.3 ms.
10:23:55 - Pingede http://www.google.dk på time=44.6 ms.
10:24:05 - Pingede http://www.google.dk på time=42.5 ms.

Jeg vil lige hygge mig med at ændre en smule, så det passer til en hel undervisningsdag.

PS: Det bliver sjovt at se hvad de siger til resultatet, da det skiller sig kraftigt ud fra kommentare som "Nettet virkede ikke mellem kl 9 og 14" 8-)
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Det stopper helt ved manglende netværk:

Kode: Vælg alt

10:38:33 - Pingede www.google.dk på time=117 ms. (499 ping mangler)
10:39:34 - Pingede www.google.dk på time=44.5 ms. (498 ping mangler)
10:40:34 - Pingede www.google.dk på time=44.5 ms. (497 ping mangler)
10:41:34 - Pingede www.google.dk på time=45.5 ms. (496 ping mangler)
10:42:34 - Pingede www.google.dk på time=42.9 ms. (495 ping mangler)
10:43:34 - Pingede www.google.dk på time=43.4 ms. (494 ping mangler)
ping: unknown host www.google.dk
- Serveren kunne ikke nås -
c@chr:~$

Hvor skal der ændres, sådan at det bare kører uafbrudt? Tidsangivelse for "- Serveren kunne ikke nås -" mangler, og jeg ville gerne slippe af med "ping: unknown host http://www.google.dk".

PS: Jeg smider denne løsning over under guides bagefter, da der sikkert er andre som kan bruge det fremover.
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Kode: Vælg alt

echo "$(date +%k:%M:%S) - Serveren kunne ikke nås -"

Må være løsningen på tidsangivelsen ved manglende netværk.
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Jeg har ændret det så scriptet ikke stopper ved manglende netværk. Jeg fjernede det ene "break" i denne linie:

Kode: Vælg alt

if [ "$?" -ne "0" ] ; then
      echo "- Serveren kunne ikke nås -"
      break
   fi

Det gør at scriptet fortsætter, og at der så bare ikke er en tidsangivelse på det forgæves ping i loggen. Jeg vil lige se om jeg kan få den til at skrive " - Serveren kunne ikke nås -" i loggen, når der ikke er netværk, men ellers er det fint nok som det er nu :)
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Openload til netværkstest

Indlæg af NickyThomassen »

Yes, meget spændende lille projekt :)
Jeg tror jeg har rettet det hele til, og nu hvor det næsten er færdigt, har jeg skrevet nogle kommentarer ind i koden. Hvis det er, så må du gerne give feedback på kommentarerne, så jeg ved om de ramte rigtigt eller ej.

Kode: Vælg alt

#!/bin/bash
########################################################################################
#
#   INDSTILLINGER
#
# Hvis det ønskes, så kan der gemmes en kopi, af det som terminalen viser, i fil.
# Filen vil hedde det samme som scriptet med *.log bagefter, og blive lagt i samme mappe.
# (Af)kommentér følgende linie hvis det ønskes, og sæt den til "yes":
USE_LOG="yes"
#
# Hvor længe skal der i sekunder ventes imellem hvert ping?
# (skal være ét helt tal, og intet andet)
PING_WAIT=6
#
########################################################################################
#
# Lad os rydde skærmen først
clear
# $2 betyder variable nr. 2 efter scriptnavnet, og hvis den ikke er sat,
# så er vi nødt til at afbryde, for uden 2 variabler (server der skal pinges og antal pings),
# er der ingen pointe i at fortsætte.
if [ "$2" = "" ] ; then
   # De 2 echo'er vises i terminalen
   echo "Adresse eller ønsket antal pings mangler"
   # $0 bliver erstattet af scriptnavnet.
   echo "Bruges [sh $0 www.domæne.tld 6]"
   # Og denne her afslutter scriptet med fejl 10.
   # Alle exit-koder udover 0 betyder fejl, imens 0 betyder succes.
   exit 10
fi
# Variable 1 ($1) = den side der skal pinges.
# Og variable 2 ($2) = antal af pings der skal udføres.
URL=$1
ROTATE=$2
# En while-konstruktion kører så længe som en bestemt ting er sand, og i dette script,
# er det så længe variablen $ROTATE ikke er lig nul.
while [ "$ROTATE" -ne "0" ] ; do
# Denne her er lidt speciel, for der sker flere ting:
# For det første er hele kommandoen pakket ind, sådan så resultatet af ping gemmes i en variabel.
# Dernæst betyder den lodrette streg ( | ) at resultatet skal køres videre til det næste program der kaldes,
# her programmerne grep og awk. I sidste ende betyder det, at det eneste som gemmes i vaiablen $P
# er pingtiden.
P=$(ping -c 1 $URL | grep time | awk '{ print $8 }' | grep time)
   # Og nu skal vi så vide om ping afsluttede med succes eller ej, og det gør man
   # ved at vurdere dens exit-status, som automatisk gemmes i variablen $?. Igen er nul succes,
   # imens alt andet end nul er fejl. Ved fejl afvikles kun den første blok (indtil else),
   # og ved succes afvikles kun den anden blok (fra else til fi).
   if [ "$?" -ne "0" ] ; then
      echo "$(date +%k:%M:%S) - $URL kunne ikke nås -"
      # Denne her if finder ud af om logging til fil ønskes, og kun hvis
      # $USE_LOG="yes", bliver der skrevet til loggen.
      if [ "$USE_LOG" = "yes" ] ; then
         # Variablen $PWD som der bruges her, er = Print Working Directory,
         # og $0 er jo lige scriptets navn, så $PWD/$0 giver den komplette sti til scriptet.
         echo "$(date +%k:%M:%S) - $URL kunne ikke nås -" >> "$PWD/$0.log"
      fi
   else
      # Dette skrive som sagt ved succes
      echo "$(date +%k:%M:%S) - Pingede $URL på $P ms. ($ROTATE ping mangler)"
      # Og ligesom ved fejl, så skal loggen kun skrives hvis den er sat
      if [ "$USE_LOG" = "yes" ] ; then
         echo "$(date +%k:%M:%S) - Pingede $URL på $P ms." >> "$PWD/$0.log"
      fi
   fi
# Hver gang while har kørt 1 gang, så trækker vi 1 fra variablen $ROTATE, sådan så vi når nul på et tidspunkt.
ROTATE=$((ROTATE-1))
# Denne her er også lidt speciel, men pointen er, at hvis vi er færdige med at pinge,
# så gider vi ikke vente X antal sekunder på at scriptet afslutter.
# Så hvis variablen $ROTATE er nul, så afslutter vi while med det samme.
if [ "$ROTATE" -ne "0" ] ; then
# Sleep bestemmer hvor længe der ventes imellem hvert ping,
# og den vil bruge tallet fra variablen $PING_TIME som vi satte oppe i hovedet.
   sleep $PING_WAIT
else
   # break afslutter while med det samme.
   break
fi
# Og til sidst, som nævnt højere oppe, så afslutter vi hele scriptet med succes
done
exit 0
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Så kan vi da sammenligne lidt nu. Jeg har fået det til at virke som jeg gerne ville have det (det er loggen jeg vil bruge), så jeg har tilføjet lidt linier med "echo" i starten:

Kode: Vælg alt

#!/bin/bash
echo "Testen af netværket blev startet: $(date)" > "$PWD/$0.log"
echo "" >> "$PWD/$0.log"
echo "Hvis der ingen tidsangivelse (time=) er i resultatet," >> "$PWD/$0.log"
echo "betyder dette at der ingen forbindelse var på netværket." >> "$PWD/$0.log"
echo "" >> "$PWD/$0.log"
echo "" >> "$PWD/$0.log"

clear
if [ "$2" = "" ] ; then
   echo "Adresse eller ønsket antal pings mangler"
   echo "Bruges [sh $0 www.domæne.tld 6]"
   exit 10
fi

URL=$1
ROTATE=$2

while [ "$ROTATE" -ne "0" ] ; do
P=$(ping -c 1 $URL | grep time | awk '{ print $8 }' | grep time)
   if [ "$?" -ne "0" ] ; then
      echo "$(date +%k:%M:%S) - Serveren kunne ikke nås -"
   fi

ROTATE=$((ROTATE-1))
echo "$(date +%k:%M:%S) - Pingede $URL på $P ms. ($ROTATE ping mangler)"

# Hvis det ønskes, så kan der gemmes en kopi, af det som terminalen viser i fil.
# Filen vil hedde det samme som scriptet med *.log bagefter, og blive lagt i samme mappe.
# Afkommenter følgende linie hvis det ønske:
echo "$(date +%k:%M:%S) - Pingede $URL på $P ms." >> "$PWD/$0.log"

if [ "$ROTATE" -ne "0" ] ; then

# Tallet efter 'sleep', bestemmer hvor mange sekunder der ventes imellem hvert ping.
   sleep 10
else
   break
fi
done
exit 0
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

Her er loggen fra en test med 500 ping, og 4 gange simuleret nedbrud (jeg slukkede for mit netværk) http://paste.ubuntu.com/1220446/
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Openload til netværkstest

Indlæg af NickyThomassen »

christian.arvai skrev:Her er loggen fra en test med 500 ping, og 4 gange simuleret nedbrud (jeg slukkede for mit netværk) http://paste.ubuntu.com/1220446/

Hvis den stadig kunne pinge uden netværket, så er det nok på tide at slukke den, og destruere den :D

Men det ser da godt i loggen, det må give dem noget ordentligt at arbejde med på VUC. Jeg tror også at jeg gemmer en kopi af scriptet, for det kan sikkert genbruges til andre ting.
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Openload til netværkstest

Indlæg af lath »

Du kan anvende sleep kommando til at lade programmet sove lidt før du prøver igen.

Det er bedst at trace route, fordi så får man en ide om hvor filmen knækker (efter hvilken router problemet opstår).

Det er også mere interessant at prøve at bruge TCP i stedet for ICMP med ping kommando. Årsagen er at nogle routere eller firewalls dropper ICMP pakker, og det vil virke som om der ikke er forbindelse til routeren, selv om der i virkeligheden er det.

Nogle firewall tager decideret livet af ICMP pakker,, og så virker ping ikke.

TCP tracerouting kommando hedder tcptraceroute.

Giver traceroute lidt for meget information, så kig på det lille program der hedder nc - det kan oprette en TCP eller en UDP forbindelse til f.eks. Google, med et bestemt interval (-i parameter).

I øvrigt er det bedst TCP pinge til dmi.dk istedet for google, da DMI er en del af det danske beredskab, og altid skal have noget der virker.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Brugeravatar
Christian.Arvai
Admin
Indlæg: 10725
Tilmeldt: 26. apr 2008, 19:27
IRC nickname: Christian_Arvai
Geografisk sted: Holeby - Lolland

Re: Openload til netværkstest

Indlæg af Christian.Arvai »

@Lars

Jeg kan godt se fordelen i at spore sig nærmere ind på fejlen, men hvis vi skal til at bruge tid, på at fejlsøge på hele VUC's netværk, kommer det til at koste dem, skal vi sige 250kr/timen som overføres til foreningens konto løbende ;)

At det så kan være super interessant at bygge til os selv, og til brug af medlemmer herinde, er jo en helt anden sag, så hvis du kan lave et script med det indhold, må du da meget gerne gøre det.
Med venlig hilsen Christian

"We can only see a short distance ahead, but we can see plenty there that needs to be done." -- Alan Turing