Im Zeitalter von Flat-Angeboten rangierten bei mir Programme zum Überwachen des Datenverkehrs bisher eher auf den hinteren Plätzen. Seitdem ich aber einen vServer mein Eigen nenne, interessiert mich das tägliche Volumen an ein- und ausströmenden Bits und Bytes umso mehr.
Gut, ich denke die meisten VPS-Anbieter bieten schon eine Art von Netzwerkmonitor an, da sie selbst daran interessiert sind, dass der Kunde die vereinbarte Trafficgrenze nicht überschreitet. So macht das mein Anbieter auch und stellt mir sogar eine grafische Übersicht und Charts zur Verfügung, wann und wie viel Datenverkehr durch die Leitungen fließt.
Der Nachteil des Ganzen ist, ich muss mich erst einmal in das Kundenmenü einloggen und kann nicht eben so die Daten auch auf meiner Projektseite darstellen.
Wie immer gibt es mehrere Alternativen. Ich dachte zuerst an RRDtool und MRTG oder ntop. Beide sahen sehr vielversprechend aus, doch sie boten mir zu viele Funktionen, wenn man das so pauschal umschreiben kann. Ich hingegen wollte etwas schlichtes und einfaches. Eine Ausgabe auf der Konsole, vielleicht noch ein paar nette Graphen dabei, die die Datenmenge visualisieren.
Womit ich bei vnstat gelandet war und ein charmantes Werkzeug gefunden hatte.
Vnstat hat ein Init-Skript und startet als Daemon. Im Hintergrund überwacht er dann das vorher definierte Interface und sammelt die mitgezählte Datenmenge in einer Datenbank. Keine Sorge, vnstat ist äußerst genügsam. 1 MB RAM solltet ihr aber einplanen.
Zuerst muss das Interface in /etc/vnstat.conf definiert werden, welches standardmäßig überwacht werden soll. Danach wird die Datenbank erstellt bzw. erneuert. Z.B. für eth0:
vnstat -u -i eth0
Macht man das nicht, erscheint diese Fehlermeldung.
Starting vnStat daemon: vnstatdZero database found, exiting.
Die restlichen Optionen in der Konfigurationsdatei sind gut dokumentiert. Dort lässt sich vor allem das Erscheinungsbild der Ausgabe festlegen.
Bedienung
Die Bedienung von vnstat ist unkompliziert.
vnstat -s
rx / tx / total / estimated eth0: May '12 911.31 MiB / 1.45 GiB / 2.34 GiB Jun '12 470.22 MiB / 773.50 MiB / 1.21 GiB / 18.40 GiB yesterday 287.79 MiB / 468.17 MiB / 755.96 MiB today 182.42 MiB / 305.33 MiB / 487.75 MiB / 496 MiB
vnstat -h
eth0 23:35 ^ t | t | t t | t t | t t t | t t t | rt t t | t rt t t t | rt rt t t rt t t r t | rt rt rt t rt rt rt rt rt rt rt -+---------------------------------------------------------------------------> | 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 h rx (KiB) tx (KiB) h rx (KiB) tx (KiB) h rx (KiB) tx (KiB) 00 14016 23119 08 1331 1338 16 9086 9262 01 30605 63348 09 2884 1561 17 3132 2485 02 10203 18235 10 3578 2039 18 5605 2448 03 2365 1848 11 6236 6186 19 5697 6172 04 2930 42386 12 8270 6724 20 12474 14342 05 1437 1210 13 5878 4099 21 11467 55362 06 1680 1886 14 5107 2972 22 17298 11634 07 1554 1231 15 13417 19035 23 12446 16185
vnstat -d
eth0 / daily
day rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- 05/28/12 159.61 MiB | 263.27 MiB | 422.88 MiB | 40.09 kbit/s 05/29/12 215.86 MiB | 382.90 MiB | 598.75 MiB | 56.77 kbit/s 05/30/12 227.47 MiB | 315.93 MiB | 543.41 MiB | 51.52 kbit/s 05/31/12 308.36 MiB | 520.59 MiB | 828.96 MiB | 78.60 kbit/s 06/01/12 287.79 MiB | 468.17 MiB | 755.96 MiB | 71.68 kbit/s 06/02/12 184.27 MiB | 307.72 MiB | 492.00 MiB | 47.47 kbit/s ------------------------+-------------+-------------+--------------- estimated 187 MiB | 312 MiB | 499 MiB |
Abgerundet wird das Ganze noch durch vnstat -m und vnstat -t, eine monatliche Anzeige und die Übersicht der 10 verkehrsreichsten Tage.
vnstat als tägliche Zusammenfassung per E-Mail erhalten
Man kann z.B. einen Cron-Job definieren, der täglich um 23:59 die Zusammenfassung per Mail an den Superuser schickt.
59 23 * * * apo /usr/bin/vnstat -s | mail -s "vsrv52135: Daily traffic eth0" root@localhost
vnstati
Praktischerweise gibt es noch vnstati, dass die Statistiken in schöne, übersichtliche Graphen transformieren kann.
Ich habe mir ein simples Skript geschrieben, dass jeden Tag um Mitternacht die Graphen produziert und in ein Verzeichnis des Webservers kopiert.
#!/bin/sh
# Visualisierter Netzwerkverkehr mit Vnstat
# Ausgabe der Dateien in das Webserververzeichnis stats/traffic
set -e
Target="/home/linuxiuvat/linuxiuvat.de/stats/traffic/graph/"
# stündlich
/usr/bin/vnstati -h -o ${Target}vnstat_hourly.png
# täglich
/usr/bin/vnstati -d -o ${Target}vnstat_daily.png
# monatlich
/usr/bin/vnstati -m -o ${Target}vnstat_monthly.png
# Top10
/usr/bin/vnstati -t -o ${Target}vnstat_top10.png
# Zusammenfassung
/usr/bin/vnstati -s -o ${Target}vnstat_summary.png
Anschließend lässt sich die visualisierte Datenmenge unter http://linuxiuvat.de/stats/traffic/ anschauen.
Hi,
thanks for the article.
I use vnstat on a daily basis (Lubuntu 16.04.4 LTS, 64 bit).
I´m very interested in
„59 23 * * * apo /usr/bin/vnstat -s | mail -s „vsrv52135: Daily traffic eth0″ root@localhost“.
Yet I don´t quite understand the „apo“-part. Could you give me a clue as to what it does?
Greetings
Rosika Schreck
Hallo,
apo ist der Benutzer, der den Befehl ausführt. Einfach durch den eigenen Benutzernamen oder root ersetzen.
Danke für die Antwort.
Diese Syntax habe ich so noch nicht gekannt, bzw. benutzt. Bei mir sieht ein eingetragener cronjob z.B. so aus:
„00 * * * * mpg123 -o alsa -g 100 /home/rosika/Dokumente/Pausenzeichen/Big_Ben_chimes/Big-ben-chimes.mp3 > /dev/null 2>&1
„, also ohne Benutzer-Namen.
Soviel ich weiß, ist es aber bei systemweiten Cron-Tabellen so, daß sie eine Spalte mehr besitzen, in der der Benutzer eingetragen wird, unter dem der jeweilige Befehl ausgeführt werden soll.
Das scheint hier also der Fall zu sein.
Vielen Dank für die Aufklärung.
Rosika
Genau. Der Eintrag sollte so in /etc/crontab stehen. Wenn man die benutzerspezifischen crontabs benutzt, kann man den Benutzernamen natürlich weglassen.
Aha, gut. Dann kann ich den Befehl also auch als benutzerspezifischen crontab anlegen.
Der Eintrag müßte dann folglich so lauten:
„59 23 * * * /usr/bin/vnstat -s | mail -s „vsrv52135: Daily traffic eth0″ root@localhost“.
LG
Rosika
Hallo nochmals.
Ich hatte noch etwas mit dem eigentlichen mail-Programm und dessen Syntax zu kämpfen. Jetzt hat´s aber geklappt.
Bei mir ist „s-nail“ installiert (musste ich auch erst nachschauen).
Außerdem läuft mein Internet über einen Web-Stick (Schnittstelle: ppp0).
Nun habe ich probehalber eine Mail verschickt mit folgender Syntax:
„/usr/bin/vnstat –iface ppp0 -s | s-nail -s „Verbrauch_ppp0″ rosika“. Der Versand und Empfang haben jetzt endlich ohne Probleme geklappt.
Nun muß ich das Ganze nur noch als cronjob eintragen.
LG
Rosika