Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Mit google fand ich auf Anhieb keine guten Informationen. Wie würdet ihr Traffic Accounting machen?
Hintergrund:
Wir überlegen von der teurer gewordenen Flatrate auf die Traffic begrenzte umzusteigen. Dafür würde ich gerne wissen wieviel Traffic wir produzieren.
thomas
Am Montag, 23. September 2002 22:09 schrieben Sie:
Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Mit google fand ich auf Anhieb keine guten Informationen. Wie würdet ihr Traffic Accounting machen?
Hintergrund:
Wir überlegen von der teurer gewordenen Flatrate auf die Traffic begrenzte umzusteigen. Dafür würde ich gerne wissen wieviel Traffic wir produzieren.
thomas
du könntest es einfach mit ipchains machen mit
ipchains -A input -i ppp -d 127.0.0.1 ipchains -A output -i ppp -s 127.0.0.1
das startest mit jedem systemstart :) um eine Ausgabe zu erhalten nehme:
ipchains -L -x -v
und die Zähler konnte man (glaub ich) mit ipchains -Z zurücksetzen.
Mehr dazu : http://perlscripten.de/modules.php?name=News&file=article&sid=15
MFG
Christian Waldner
On Mon, Sep 23, 2002 at 10:36:09PM +0200, Christian Waldner wrote:
Am Montag, 23. September 2002 22:09 schrieben Sie:
Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
du könntest es einfach mit ipchains machen mit
OK, das mitprotokollieren funktioniert, fehlt nur noch das Auswerten.
Hier die Lösung für die, die es interessiert:
/etc/ppp/ip-up.d/ourLanSettings: """ ### Start der Traffic Accounting Regeln # Traffic kann mit folgendem Kommando angeschaut # werden: # # ipchains -v -x -L | \ # grep -E '(inlog|ininet|outlog|outinet|ineth|outeth)' | \ # grep -v references
ipchains -N inlog ipchains -A input -j inlog ipchains -A inlog -j RETURN
ipchains -N outlog ipchains -A output -j outlog ipchains -A outlog -j RETURN
ipchains -N outinet ipchains -A output -i ppp0 -j outinet ipchains -A outinet -j RETURN
ipchains -N ininet ipchains -A input -i ppp0 -j ininet ipchains -A ininet -j RETURN
ipchains -N outeth ipchains -A output -i eth1 -j outeth ipchains -A outeth -j RETURN
ipchains -N ineth ipchains -A input -i eth1 -j ineth ipchains -A ineth -j RETURN
### Ende der Traffic Accounting Regeln
# ... Restliche Regeln
""" Ende /etc/ppp/ip-up.d/ourLanSettings
/home/root/scripts/logTraffic.py: """ #!/usr/bin/env python import popen2 import string import time import re
#Ein- und Ausgangsregeln fuer Netzwerk, Internet und beides:
chains=["inlog", "ineth", "ininet", "outlog", "outeth", "outinet"] logfile="/var/log/network-traffic.log"
#Lese die Counter von ipchains. Loesche den counter #gleichezeitig:
(stdout, stdin)=popen2.popen2("ipchains -n -x -v -L -Z | grep -E '(%s)' | grep -v references" % (string.join(chains, "|"))) output=stdout.readlines() stdout.close()
traffic=[] for line in output: match=re.match(r'^\s*(\d*)\s*(\d*) (\w*).*$', line) if not match: raise("Fehler: konnte Zeile nicht parsen: %s" % line) pakete=match.group(1) bytes=match.group(2) chain=match.group(3) traffic.append((pakete, bytes, chain))
if len(chains)!=len(traffic): raise("Fehler: Nicht fuer alle Chains wurde eine Zeile von ipchains ausgeben")
curr_time=time.strftime("%Y-%m-%d %H:%M:%S")
fd=open(logfile, "at") for chain in traffic: fd.write("<time>%s</time> <chain>%s</chain> <packets>%s</packets> " "<bytes>%s</bytes>\n" % (curr_time, chain[2], chain[0], chain[1])) fd.close() """ Ende logTraffic.py
crontab -e (als root): """ PATH=/bin:/usr/bin:/usr/local/bin:/sbin:~/scripts #min std tag-des-monats monat wochentag
#Alle 5 Minuten den Traffic abspeichern:
0-59/5 * * * * logTraffic.py """
Erstelltes Log-File: /var/log/netzwerk-traffic.log: """ <time>2002-09-24 22:40:01</time> <chain>inlog</chain> <packets>3622</packets> <bytes>1363964</bytes> <time>2002-09-24 22:40:01</time> <chain>ininet</chain> <packets>1024</packets> <bytes>1174671</bytes> <time>2002-09-24 22:40:01</time> <chain>ineth</chain> <packets>2598</packets> <bytes>189293</bytes> <time>2002-09-24 22:40:01</time> <chain>outlog</chain> <packets>2888</packets> <bytes>1370378</bytes> <time>2002-09-24 22:40:01</time> <chain>outinet</chain> <packets>776</packets> <bytes>54819</bytes> <time>2002-09-24 22:40:01</time> <chain>outeth</chain> <packets>2112</packets> <bytes>1315559</bytes> <time>2002-09-24 22:45:02</time> <chain>inlog</chain> <packets>637</packets> <bytes>55121</bytes> <time>2002-09-24 22:45:02</time> <chain>ininet</chain> <packets>64</packets> <bytes>14649</bytes> <time>2002-09-24 22:45:02</time> <chain>ineth</chain> <packets>573</packets> <bytes>40472</bytes> <time>2002-09-24 22:45:02</time> <chain>outlog</chain> <packets>508</packets> <bytes>68226</bytes> <time>2002-09-24 22:45:02</time> <chain>outinet</chain> <packets>60</packets> <bytes>4128</bytes> <time>2002-09-24 22:45:02</time> <chain>outeth</chain> <packets>448</packets> <bytes>64098</bytes> <time>2002-09-24 22:50:01</time> <chain>inlog</chain> <packets>387</packets> <bytes>36585</bytes> <time>2002-09-24 22:50:01</time> <chain>ininet</chain> <packets>61</packets> <bytes>12338</bytes> <time>2002-09-24 22:50:01</time> <chain>ineth</chain> <packets>326</packets> <bytes>24247</bytes> <time>2002-09-24 22:50:01</time> <chain>outlog</chain> <packets>277</packets> <bytes>48013</bytes> <time>2002-09-24 22:50:01</time> <chain>outinet</chain> <packets>55</packets> <bytes>3889</bytes> <time>2002-09-24 22:50:01</time> <chain>outeth</chain> <packets>222</packets> <bytes>44124</bytes> <time>2002-09-24 22:55:01</time> <chain>inlog</chain> <packets>288</packets> <bytes>21283</bytes> <time>2002-09-24 22:55:01</time> <chain>ininet</chain> <packets>17</packets> <bytes>1516</bytes> <time>2002-09-24 22:55:01</time> <chain>ineth</chain> <packets>271</packets> <bytes>19767</bytes> <time>2002-09-24 22:55:01</time> <chain>outlog</chain> <packets>188</packets> <bytes>26519</bytes> <time>2002-09-24 22:55:01</time> <chain>outinet</chain> <packets>19</packets> <bytes>896</bytes> <time>2002-09-24 22:55:01</time> <chain>outeth</chain> <packets>169</packets> <bytes>25623</bytes> """
Über Fragen, Hinweise oder Verbesserungsvorschläge freue ich mich.
thomas
On Tue, 24 Sep 2002 21:08:57 +0200, Thomas Guettler wrote:
ipchains -N inlog ipchains -A input -j inlog ipchains -A inlog -j RETURN
Ist nicht ein Return am Ende einer Kette sowieso default? Bei iptables ist es jedenfalls so.
Wozu überhaupt erst in eine andere Kette hopsen? Eine Regel ohne jegliche Aktion in input, output usw. sollte als Zähler reichen. U.u. ist das Parsen der Ausgabe dann etwa schwerer.
Erstelltes Log-File: /var/log/netzwerk-traffic.log: """ <time>2002-09-24 22:40:01</time> <chain>inlog</chain> <packets>3622</packets> <bytes>1363964</bytes> <time>2002-09-24 22:40:01</time> <chain>ininet</chain> <packets>1024</packets> <bytes>1174671</bytes> <time>2002-09-24 22:40:01</time> <chain>ineth</chain> <packets>2598</packets> <bytes>189293</bytes>
Prosa in rohen Logfiles finde ich höchst unsexy. Leerzeichen tuns auch.
Reinhard
On Wed, Sep 25, 2002 at 12:29:03AM +0200, Reinhard Foerster wrote:
On Tue, 24 Sep 2002 21:08:57 +0200, Thomas Guettler wrote:
ipchains -N inlog ipchains -A input -j inlog ipchains -A inlog -j RETURN
Ist nicht ein Return am Ende einer Kette sowieso default? Bei iptables ist es jedenfalls so.
Stimmt, danke für den Hinweis.
Wozu überhaupt erst in eine andere Kette hopsen? Eine Regel ohne jegliche Aktion in input, output usw. sollte als Zähler reichen. U.u. ist das Parsen der Ausgabe dann etwa schwerer.
Wegen dem leichteren Parsen habe den Umweg gemacht. Das Parsen ist dann einfach mit "iptables -L -v -x | grep -E '(inlog|ineth|...)'" möglich.
Erstelltes Log-File: /var/log/netzwerk-traffic.log: """ <time>2002-09-24 22:40:01</time> <chain>inlog</chain> <packets>3622</packets> <bytes>1363964</bytes> <time>2002-09-24 22:40:01</time> <chain>ininet</chain> <packets>1024</packets> <bytes>1174671</bytes> <time>2002-09-24 22:40:01</time> <chain>ineth</chain> <packets>2598</packets> <bytes>189293</bytes>
Prosa in rohen Logfiles finde ich höchst unsexy. Leerzeichen tuns auch.
Wenn das Script per cron alle 20 Minuten aufgerufen wird, braucht das Log-File nach einem Monat rund 1.5MB. Das Parsen des Log-Files ist dadurch ggf. ein paar Millisekunden langsamer.
So, noch einen schönen Mittwoch Morgen!
thomas
Am Mon den 23 Sep 2002 um 10:09:37 +0200 schrieb Thomas Guettler:
Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Der Vollständigkeit halber stellt sich noch die Alternative, den output von ifconfig ppp0 einzulesen. Ich würde aber auch iptables nehmen.
Mit google fand ich auf Anhieb keine guten Informationen. Wie würdet ihr Traffic Accounting machen?
Hintergrund:
Wir überlegen von der teurer gewordenen Flatrate auf die Traffic begrenzte umzusteigen. Dafür würde ich gerne wissen wieviel Traffic wir produzieren.
Meinst du mit Accounting nur so allgemein zu wissen, wieviel Traffic ihr gerade in Summe produziert habt, oder im strengen Sinne eine Aufschlüsselung nach Verursacher? Letzteres ist schwer, da ihr ja sicher einen HTTP Proxy nutzt. Aber das ist vielleicht auch nicht der Zweck, oder?
andre
Andre Schulze wrote:
Am Mon den 23 Sep 2002 um 10:09:37 +0200 schrieb Thomas Guettler:
Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Wenn es ständig ausgelesen und ein Diagramm werden soll, dann mrtg. Für Prognosen eher rrd-tools. Wenn es nur ein paar nackte Zahlen sein sollen, reicht es auch mit iptables/ipchains. Da die Zähler pro Regel sind, kann man den Traffic damit auch noch nach bestimmten Kriterien splitten.
Der Vollständigkeit halber stellt sich noch die Alternative, den output von ifconfig ppp0 einzulesen.
Der müßte dann aber auch bei jedem Verbindungsabbau gespeichert werden, oder? Zumindest falls das Interface dabei entfernt wird.
Meinst du mit Accounting nur so allgemein zu wissen, wieviel Traffic ihr gerade in Summe produziert habt, oder im strengen Sinne eine Aufschlüsselung nach Verursacher? Letzteres ist schwer, da ihr ja sicher einen HTTP Proxy nutzt. Aber das ist vielleicht auch nicht der Zweck, oder?
Beim Einsatz von Squid empfiehlt sich sarg zur Auswertung. Das ist schon verboten genau. (siehe Datenschutz)
Rico
Thomas Guettler (guettli@thomas-guettler.de) schrieb auf LUG-DD am Mon, 23 Sep, 2002; 22:09 +0200:
Hi,
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
http://packages.debian.org/stable/net/ipac-ng.html
Mit google fand ich auf Anhieb keine guten Informationen. Wie würdet
Dann suche mal nach ppplog onlinecalc Wenn Du da nix findest schreib nochmal. Ich bin damit zufrieden.
Gruß,
Frank
Hallo!
Thomas Guettler schrieb:
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Warum muss es ipchains/iptables sein? Diese Werte werden ohnehin verfälscht über die Protokolldaten und deren Header. Die neueren Versionen des pppd liefern die benötigten Daten von selbst: Beim Abbau der Verbindung werden dem Script /etc/ppp/ip-down drei interessante Variablen übergeben:
$CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Du setzt nur nur ein Script ein, das diese Werte auswertet und summiert. Beim mir: /usr/local/bin/adslkosten $CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Falls Du Interesse an diesem Perl-Script hast, melde Dich.
Gruss Reiner
On Wed, Sep 25, 2002 at 05:27:20PM +0200, Reiner Klaproth wrote:
Hallo!
Warum muss es ipchains/iptables sein? Diese Werte werden ohnehin verfälscht über die Protokolldaten und deren Header. Die neueren Versionen des pppd liefern die benötigten Daten von selbst: Beim Abbau der Verbindung werden dem Script /etc/ppp/ip-down drei interessante Variablen übergeben:
$CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Du setzt nur nur ein Script ein, das diese Werte auswertet und summiert. Beim mir: /usr/local/bin/adslkosten $CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Das mit den Header-Informationen stimmt natürlich. Kann man die Variablen auch zur Laufzeit von pppd herausbekommen? Denn, schaltet jemand den Rechner aus ohne ihn herunterzufahren, sind die letzten Daten verloren.
thomas
Hallo!
Thomas Guettler schrieb:
Du setzt nur nur ein Script ein, das diese Werte auswertet und summiert. Beim mir: /usr/local/bin/adslkosten $CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Das mit den Header-Informationen stimmt natürlich. Kann man die Variablen auch zur Laufzeit von pppd herausbekommen? Denn, schaltet jemand den Rechner aus ohne ihn herunterzufahren, sind die letzten Daten verloren.
Das würden sie auch bei iptables sein. Fährt man den Rechner kontrolliert herunter, wird die Verbindung vom pppd korrekt abgebaut und die Daten eingetragen.
Schaltet man aus, sind die Daten sowohl beim pppd als auch bei iptables weg, wenn man nicht per cron alle xx Minuten die Werte ausliest und irgendwo protokolliert.
Wenn ich das cron machen lasse, woher weiss er, wie lange die Verbindung besteht und was er aufsummieren darf?
Gruss Reiner PS: Bei mir steht der Rechner in einer Ecke, wo sonst keiner rankommt - also ausschalten ist nicht.
On Sun, Sep 29, 2002 at 12:19:08PM +0200, Reiner Klaproth wrote:
Hallo!
Thomas Guettler schrieb:
Du setzt nur nur ein Script ein, das diese Werte auswertet und summiert. Beim mir: /usr/local/bin/adslkosten $CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Das mit den Header-Informationen stimmt natürlich. Kann man die Variablen auch zur Laufzeit von pppd herausbekommen? Denn, schaltet jemand den Rechner aus ohne ihn herunterzufahren, sind die letzten Daten verloren.
Das würden sie auch bei iptables sein. Fährt man den Rechner kontrolliert herunter, wird die Verbindung vom pppd korrekt abgebaut und die Daten eingetragen.
Huch, hätte fast deine Email übersehen, da der Thread schon ein paar Tage alt ist.
Schaltet man aus, sind die Daten sowohl beim pppd als auch bei iptables weg, wenn man nicht per cron alle xx Minuten die Werte ausliest und irgendwo protokolliert.
Genau das mache ich. Mit "ipchains -L -Z" werden die aktuellen Zählerstände angezeigt, und gleichzeitig gelöscht. Es wird somit jedes Paket gezählt, im Gegensatz zu "ipchains -L; ipchains -Z"
Wenn ich das cron machen lasse, woher weiss er, wie lange die Verbindung besteht und was er aufsummieren darf?
Da die Zähler beim Auslesen auf Null gesetzt werden, weiß man, dass seit dem letzten Log-File Eintrag X Minuten vergangen und Y Bytes gezählt wurden.
thomas
On Wednesday 25 September 2002 17:27, Reiner Klaproth wrote:
Hallo!
Thomas Guettler schrieb:
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
Warum muss es ipchains/iptables sein? Diese Werte werden ohnehin verfälscht über die Protokolldaten und deren Header. Die neueren Versionen des pppd liefern die benötigten Daten von selbst: Beim Abbau der Verbindung werden dem Script /etc/ppp/ip-down drei interessante Variablen übergeben:
$CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Du setzt nur nur ein Script ein, das diese Werte auswertet und summiert. Beim mir: /usr/local/bin/adslkosten $CONNECT_TIME $BYTES_RCVD $BYTES_SENT
Falls Du Interesse an diesem Perl-Script hast, melde Dich.
Gruss Reiner
On Mon, Sep 23, 2002 at 10:09:37PM +0200, Thomas Guettler wrote:
Hallo!
Mit google fand ich auf Anhieb keine guten Informationen. Wie würdet ihr Traffic Accounting machen?
ipac ipac-ng
Heiko
lug-dd@mailman.schlittermann.de