Traffic Report via Mail als Anhang
Changelog
- 14.01.2014 – Script fixes for more than one interface, sorry.
- 14.01.2014 – „mutt“-Script added
Die Collage enthält neben täglicher und monatlicher Daten auch eine Zusammenfassung sowie eine „Top 10“.
Für jedes Interface wird eine eigene E-Mail mit dem Betreff „Traffic Report, Interface X – Datum“ versendet.
Hierbei gehe ich von einem bereits konfigurierten Mail-System aus.
Getestet habe ich auf einem Ubuntu Server LTS sowie Debian Stable.
Abhängigkeiten und Vorbereitung
Folgende Abhängigkeiten sind notwendig.
sudo apt-get install vnstati sharutils mailutils imagemagick
„vnstati“ erzeugt für „vnstat“ die Grafiken. Auch in der Command-Line ist „vnstat“ ein nützliches Tool, um Datenverbrauch zu analysieren: „man vnstat“.
„imagemagick“ beeinhaltet das Paket „montage“ für die spätere Zusammenfassung der von „vnstati“ erzeugten Bilder.
„mailutils“ und „sharutils“ werden für den Versand der Übersicht als Anhang benötigt.
Zuerst das Standard-Interface und die Bandbreite in der Konfiguration von „vnstat“ festlegen:
sudo nano /etc/vnstat.conf
„MaxBandwidth“ darf auch auskommentiert werden, um diese Funktion zu deaktivieren, falls erwünscht:
Interface "eth0" MaxBandwidth 100
Nun für jedes Interface, für das eine Übersicht zur Verfügung stehen soll, eine Datenbank anlegen. Beispiel:
sudo vnstat -u -i eth0 sudo vnstat -u -i eth1
Das Script und Benutzung
Wie im Script zu sehen, werden vorab zwei Variablen angepasst:
INTERFACES=(interface1 interface2 interface3) MAILTO=empfaenger@domain.tld
Für jedes Interface muss wie oben beschrieben die Datenbank existieren!
#!/bin/bash SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MONTAGE=`which montage` VNSTATI=`which vnstati` UUENCODE=`which uuencode` MAIL=`which mail` DATE=`date +%d.%m.%Y` ### CONFIG START ### INTERFACES=(eth0 eth1) MAILTO=empfaenger@domain.tld #### CONFIG END #### for i in "${INTERFACES[@]}" do rm ~/out-vnstati_*.png > /dev/null 2>&1 $VNSTATI -i $i -d -o ~/out-vnstati_d_$i.png $VNSTATI -i $i -m -o ~/out-vnstati_m_$i.png $VNSTATI -i $i -s -o ~/out-vnstati_s_$i.png $VNSTATI -i $i -t -o ~/out-vnstati_t_$i.png $MONTAGE -mode concatenate -tile 2x2 ~/out-vnstati_*.png ~/out-vnstati_collage.png $UUENCODE ~/out-vnstati_collage.png TRAFFIC_$DATE.png | $MAIL -s "Traffic Report, Interface $i - $DATE" $MAILTO done rm ~/out-vnstati_*.png > /dev/null 2>&1
Usage: ./script.sh
Vorab als ausführbar markieren: chmod +x script.sh
Das Script ist leise, erzeugt also keine Ausgabe, außer es treten Fehler auf.
Optional: Cronjob
Eine Ausführung als Cronjob jeden Tag um 00:00 Uhr würde so funktionieren:
crontab -e
Mit Inhalt:
0 0 * * * /path/to/script.sh
Optional (bei Fehlern): Alternatives Script mit „mutt“
Da es zu Problemen mit der Dekodierung des Anhangs kommen kann, habe ich ein alternatives Script geschrieben, welches „mutt“ anstatt „mail“ und „uuencode“ verwendet. Falls noch nicht geschehen, „mutt“ jetzt installieren:
sudo apt-get install mutt
Das Script unterscheidet sich lediglich in der Art des Versands:
#!/bin/bash SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin MONTAGE=`which montage` VNSTATI=`which vnstati` MUTT=`which mutt` DATE=`date +%d.%m.%Y` ### CONFIG START ### INTERFACES=(eth0 eth1) MAILTO=empfaenger@domain.tld #### CONFIG END #### for i in "${INTERFACES[@]}" do rm ~/out-vnstati_*.png > /dev/null 2>&1 $VNSTATI -i $i -d -o ~/out-vnstati_d_$i.png $VNSTATI -i $i -m -o ~/out-vnstati_m_$i.png $VNSTATI -i $i -s -o ~/out-vnstati_s_$i.png $VNSTATI -i $i -t -o ~/out-vnstati_t_$i.png $MONTAGE -mode concatenate -tile 2x2 ~/out-vnstati_*.png ~/out-vnstati_collage.png echo | $MUTT -s "Traffic Report, Interface $i - $DATE" $MAILTO -a ~/out-vnstati_collage.png done rm ~/out-vnstati_*.png > /dev/null 2>&1