Skript zum einhalten der Traffic Grenze

  • Hallo,
    hab ein Skript geschrieben, welches euch helfen soll Traffic Grenzen bei euren v/Servern einzuhalten...


    Eine neue Version meines Skriptes zur Traffic Kontrolle habe ich fertig gestellt.


    Version 1.1
    - Debug Code entfernt
    - Parameter “-l” hinzugefügt –> Schreibt LOG nach “/var/log/traffctrl”


    Bei Interesse einfach eine PM an mich!

  • Hallo,
    die Idee für ein solches Tool könnte durchaus interessant sein, aber wenn du den Traffic einfach über das ethX Device abrufst wirst du falsche Werte erhalten.
    Das eth0-Device meines vServers hat laut ifconfig jeweils über 200 GB versendet und empfangen. Dies ist aber für meinen vServer um Längen zu hoch angesetzt (habe gerade einmal 2 GB seit bestehen des vServers übertragen).
    Ich vermute, dass das Gastsystem hier auch einfach den gesamten Traffic des eth-Devices des Wirtssystems zu sehen bekommt.
    Somit bräuchte man wohl einen anderen Ansatz, als einfach nur das ethX Device abzufragen.


    Eine Möglichkeit wäre es, über ein Script sich auf dem vservercontrolpanel einzuloggen und dort dann die Traffic-Seite zu interpretieren. Ich denke, das ist die einzige zuverlässige Möglichkeit, korrekte Daten zu erhalten.

  • Jep, den Hinweis auf vnStat habe ich schon gesehen. :)
    Dort steht "The traffic information is analyzed from the /proc filesystem". Wenn ich auf meinem vServer den Traffic über /proc/net/dev auslese, so stehen dort bei mir aber auch die 200 GB.
    Und das Programm vnStat greift wenn man es ausführt auch auf die o.g. proc-Datei zu.


    Code
    edv-froehlich:~# strace vnstat -u -i eth0 2>&1 | grep proc
    open("/proc/net/dev", O_RDONLY)         = 3

    Daher bin ich immer noch der Meinung, dass das Programm in dieser von Netcup eingesetzten vServer-Umgebung nicht brauchbar ist.

  • Vnstat tut schon mehr als einfach die Werte als /proc/net/dev auszulesen und auszugeben. Es Verteilt den Traffic auf den Zeitraum, an dem er auch tatsächlich angefallen ist z.B. Tage, Monate etc. Ich prüfe in meinem Fall die Monate ab da ja das Traffic Limit auf einen Monat beschränkt ist und dann wieder auf 0 gesetzt wird. Vergleich mal deine Werte mit der Ausgabe von "vnstat -i ethx -m"

  • Tach,
    das mag ja so schon stimmen, ich bin mir nur eben nicht sicher, ob die Werte, die vnStat dadurch übermittelt bekommt, auch tatsächlich stimmen. Sicherlich kann man den Traffic auf den Zeitraum runterechnen in dem er angefallen ist usw.. Wenn nun aber einfach die Trafficmenge, die vnStat zu Gesicht bekommt, falsch ist, lässt sich da auch nicht mehr viel ausbessern.
    Es ist mir eben einfach nur aufgefallen, dass der Traffic des eth-Devices definitiv nicht nur mein eigener Traffic ist.

  • Zitat von dfroe;1087


    Es ist mir eben einfach nur aufgefallen, dass der Traffic des eth-Devices definitiv nicht nur mein eigener Traffic ist.


    Hi,


    ist mir auch schon aufgefallen in phpsysinfo:


    Zitat


    Netzwerk-Auslastung
    [SIZE=-1]Schnittstelle[/SIZE] [SIZE=-1]Empfangen[/SIZE] [SIZE=-1]Gesendet[/SIZE] [SIZE=-1]Fehler/Verworfen[/SIZE] [SIZE=-1]
    eth0[/SIZE] [SIZE=-1]91.01 GB[/SIZE] [SIZE=-1]192.01 GB[/SIZE] [SIZE=-1]0/0[/SIZE]


    Ein bisschen viel Traffic :D


    Gruß,


    Stefan

  • n'Abend,
    ich hab mir mal ein kleines Bash-Script gebastelt, welches sich auf dem vservercontrolpanel einloggt und dort den Traffic des heutigen Tages ausliest. Nach der Ausführung gibt das Script Traffic_Incoming, Traffic_Outgoing und Traffic_Total (in GB) jeweils durch Semikolon getrennt aus.


    Wenn man nun dieses Script immer um 23:59 UTC ausführt und die Ergebnisse in eine CSV-Datei, Datenbank, o.ä. schreibt, lässt sich mit diesen Daten dann machen was man will.

  • Hallo,
    ich habe mein Bash-Script nun so weit vervollständig, dass dieses nun endlich was sinnvolles macht. :)


    Es holt sich die Traffic-Daten direkt vom vservercontrolpanel, man kann sich also sicher sein, dass die ermittelten Werte auch tatsächlich korrekt sind (bzw. zumindest mal die sind, die später auch auf der Rechnung erscheinen :rolleyes:)


    Das Skript lässt sich über drei Wege aufrufen:


    1.) Wenn man das Script einfach ohne irgendwelche Argumente ausführt gibt es den Traffic (incoming, outgoing, total) in MB und mit Semikolon getrennt aus. Diese Werte ließen sich dann z.B. in eine Datenbank einpflegen.


    2.) Wenn man dem Script als Argument eine Ganzzahl übergibt, so wird der Traffic wie in 1.) ausgegeben, allerdings nur dann, wenn der TotalTraffic größer ist als die per Parameter übergebene Ganzzahl. Beide Werte wieder in MB.


    3.) Man übergibt als ersten Parameter eine Ganzzahl (Traffic in MB) und als zweiten Parameter eine Mail-Adresse. Übersteigt nun der TotalTraffic das angegebene Limit, so wird automatisch eine Benachrichtigung an die angegebene Mail-Adresse verschickt.


    Ideal wäre nun das Script nach Methode drei immer um 23:59 UTC (d.h. 00:59 Uhr) per CronJob zu starten. War an dem Tag der Traffic-Verbrauch übermäßig hoch findet man am nächsten Morgen eine entsprechende Mail in seinem Postfach und kann nach eigenem Ermessen darauf reagieren. Setzt man die Traffic-Grenze auf InklusivTraffic/30 dürfte eigentlich nichts mehr schief gehen solange man keine Warn-Mail bekommt. :)


    Das Bash-Script benötigt wget, awk, mail und die bash.
    Auf Debian-Systemen tut's folgender Befehl:
    "apt-get install bash wget mawk mailx"


    So, dann viel Spass beim Füttern eurer Cron-Tabs. :D


    Bash-Script "vservertraffic":

  • Eine neue Version meines Skriptes zur Traffic Kontrolle habe ich fertig gestellt.



    Version 1.1
    - Debug Code entfernt
    - Parameter “-l” hinzugefügt –> Schreibt LOG nach “/var/log/traffctrl”

  • Zitat von dfroe;1111

    3.) Man übergibt als ersten Parameter eine Ganzzahl (Traffic in MB) und als zweiten Parameter eine Mail-Adresse. Übersteigt nun der TotalTraffic das angegebene Limit, so wird automatisch eine Benachrichtigung an die angegebene Mail-Adresse verschickt.



    Wie übergebe ich die Parameter genau?

    Zitat


    Ideal wäre nun das Script nach Methode drei immer um 23:59 UTC (d.h. 00:59 Uhr) per CronJob zu starten. War an dem Tag der Traffic-Verbrauch übermäßig hoch findet man am nächsten Morgen eine entsprechende Mail in seinem Postfach und kann nach eigenem Ermessen darauf reagieren. Setzt man die Traffic-Grenze auf InklusivTraffic/30 dürfte eigentlich nichts mehr schief gehen solange man keine Warn-Mail bekommt. :)



    Könntest du noch ein Beispiel cron nennen? Den könnte man ja dann einfach in cron.daily nutzen, richtig? Oder eher cron.d?

    Ein "Testargument" oder Testmodus wäre nett, das man schauen kann ob das Script dann auch wirklich mails verwendet ohne das Limit niedrig zu setzen und nen Tag zu warten / einen extra Cron zu erstellen.

    Werd das nachher mal testen vielleicht bekomm ichs ja allein hin.

  • Hallo,
    für den fertigen Einsatz auf einem Produktivsystem habe ich folgenden Eintrag in der /etc/crontab, der bei 500 MB Traffic (2-Euro-vServer) anschlägt.

    Code
    58 23 * * *     root    /usr/local/bin/traffic_netcup 500 MeineMailAdresse

    Da siehst du auch, was mit dem "Parameter übergeben" gemeint ist: Einfach in der Befehlszeile anhängen.


    Und zum Testen starte doch einfach in der Shell von Hand z.B. folgendes Kommando:

    Code
    /usr/local/bin/traffic_netcup 1 deineMailAdresse

    Das sollte eine Mail verschicken, wenn der Traffic des heutigen Tages 1 MB überschritten hat.

  • Zitat von dfroe;1111

    Hallo,
    ich habe mein Bash-Script nun so weit vervollständig, dass dieses nun endlich was sinnvolles macht. :)


    Eine kleine Verbesserung für das Script:
    Einfach http:// durch https:// ersetzen, damit das Passwort nur verschlüsselt übertragen wird.

  • @ dfroe:


    Ganz böses Foul: http ohne "s"!
    Die beste Absicherung die Servers bringt nichts, wenn man unverschlüsselt die Zugangsdaten zum VCP durchs Netz jagt.


    Ansonsten: Schönes Ding!



    EDIT: Ich sehe gerade: carfal ist es auch schon aufgefallen.

    Mein Server:
    v(olks)Server 1. Serie: 2,5GHz, 1024MB RAM, 1024MB Swap, 2x60GB-Raid1-HDD, Traffic-Flat
    Node:
    78.46.117.9x | hos-tr2.ex3k4.rz7.hetzner.de