kleiner Traffic-Monitor mit awk

u.g

Aktives Mitglied
Mitglied seit
27 Mrz 2005
Beiträge
1,619
Punkte für Reaktionen
29
Punkte
48
Ich habe mir einen kleinen Traffic-Monitor für awk gebastelt, der aus der ifconfig-Ausgabe verschiedenes berechnet und summiert.

Einen awk (busybox mit awk) gäbe es hier.

Das Skript läuft, bis es mit STRG-C abgebrochen wird.
Das gewünschte Device (default: dsl), die Wartezeit zwischen den ifconfig-Aufrufen (def.: 5 Sek.) und der Pfad zum awk (def.: awk) können angepasst
werden. Device und Wartezeit können auch per Aufruf übergeben werden
(z.B. scriptname dsl 5)

Es werden die Zahlen (Bytes) von der RX.*bytes-Zeile der ifconfig-Ausgabe ermittellt und summiert.
Die angezeigten Zahlen sind in MB.
  • akt.Zaehl.: Summe von RX- u. TX-Bytes
  • Neu: neuer Traffic in den letzten x Sekunden
  • Ges: Gesamt-Tr. seit Skript-Start
  • Minuten: Laufzeit des Skripts
  • MB/H/s: berechneter Traffic pro Stunde (Grundlage: Traffic bei Ges.)
  • MB/H/a: berechneter Traffic pro Stunde aktuell (Grundlage: Traffic in letzten x Sekunden)
Die Ausgabe kann natürlich auch in eine Datei umgeleitet werden.
Dann sollte evtl. der "if ( zeile == 22 )"-Block auskommentiert/gelöscht werden.

Hier das Skript:
Code:
#!/bin/sh

AWK="awk"
device="dsl"
pause=5

if [ $# -eq 2 ]; then
    device=$1
    pause=$2
fi

echo "$device $pause"| $AWK '{ 
    dev=$1
    sleep=$2
    ges=0
    anf=0
    zeile=0
    start=systime()
    cmd="ifconfig "dev"|grep RX.*byt;sleep "sleep 
    print "akt.Zaehl.        Neu        Ges    Minuten     MB/H/S     MB/H/a"
    while (cmd|getline) { 
        zeile++
        r=substr($2,7)/1024/1024
        t=substr($6,7)/1024/1024
        s=r+t
        now=systime()
        secs=now-start
        sdiff=secs-secs_alt
        if ( anf == 0 )  { alt=s; anf=1 }
        d=s-alt
        ges=ges+d
        alt=s
        if ( secs > 0 )  { 
            phs=(ges/secs)*60*60; pha=(d/sdiff)*60*60 
        }
        printf "%10.3f %10.3f %10.3f %10.2f %10.3f %10.3f\n",
            s,d,ges,secs/60,phs,pha
        secs_alt=secs
        if ( zeile == 22 )  {     
            zeile=0
            print "akt.Zaehl.        Neu        Ges    Minuten     MB/H/S     MB/H/a"
            }
        close(cmd) } }'
(als zip in der Anlage)

EDIT1:
Im Skript also ggf. "AWK" (und "device" und "pause") anpassen.

EDIT2:
Wenn man den Zähler von ifconfig resetten will, dann geht das so (allerdings mit Verbindungstrennung u. -neuaufbau)
(besseren Weg habe ich bisher nicht - hat jemand nen anderen Tip ?):
Code:
dsld -s
rmmod kdsldmod
insmod kdsldmod
dsld
EDIT3:
Der Zähler wird bei nem bestimmten Wert automatisch wieder auf 0 gesetzt (glaube bei 4 GB), weiss grad nicht, wie sich das Skript dann verhalten würde. Evtl. ist da noch Anpassungsbedarf. Ich resette momentan jede Nacht um 0:00 die Zähler (wie oben), dann sind Zähler=Tagesverbrauch
 

Anhänge

Zuletzt bearbeitet:
bekommt man eigentlich snmp auf der fritzbox zum laufen? dann könnte man doch bestimmt manche sachen per mrtg abfragen und schöne bunte bilder zaubern.
 
Das wäre auch ne feine sache SNMP, gibt das schon was neues oder ein MOD ?

Chris
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,873
Beiträge
2,303,516
Mitglieder
378,533
Neuestes Mitglied
PatrickSt91