Traffic messen unter Linux

Von Robert

In diesem Artikel werden wir beschreiben, wie man mit Hilfe des Programms bwbar den Traffic eines Linux-Servers überwachen und archivieren kann. Sowohl eine echtzeitüberwachung per Webbrowser ist möglich, als auch das Sichern nach bestimmtem Zeiträumen.

Installation

Zuerst ladet ihr euch die neueste Version von bwbar herunter und entpackt sie.

Die Dateien aus dem Ordner bandwidth kommen in das Verzeichnis eures Webservers.
z.B. /home/httpd/html/bwbar/

und sind später erreichbar unter http://yourdomain/bwbar

Die anderen Dateien kopiert ihr am besten in ein Verzeichnis z.B. /usr/local/program/bwbar

Wenn ihr bwbar auf einem Server mit PHP anstatt SSI (Server Side Includes) laufen lassen wollt, dann sind noch weitere Änderungen notwendig.

In euer Apache Config /etc/httpd/conf/httpd.conf sollte folgende Zeile vorhanden sein:

AddType application/x-httpd-php .php .php4 .html

Hier gilt der Dank an Arne der die bwbar.c so modifiziert hat, das sie auch mit PHP läuft. Den Patch hier runterladen.

Folgende Zeilen müssen ersetzt werden:
fprintf(ubar, "\nLogging was started on <!--#include virtual=\"time.txt\" -->.\n<BR>\n");
fprintf(ubar, "Current server time is <!--#echo var=\"DATE_LOCAL\"-->.\n");

fprintf(ubar, "\nLogging was started on <?php include(\"./time.txt\"); ?>.\n<BR>\n");
fprintf(ubar, "Current server time is <?php echo date(\"l, d-M-Y H:i:s T\"); ?> .\n");

Anschließend muss der Quellcode noch neu kompiliert werden und die bestehende bwbar kann gelöscht werden.

gcc bwbar.c -o bwbar

Somit ist alles einsatzbereit. Wenn nötig chown httpd:httpd der Dateien und Verzeichnissen durchführen.

Die Konfigurationsdatei bwbar_config sollte im Ordner /etc abgelegt werden. Folgende Punkte in der bwbar_config müssen geändert werden und bwbar ist bereit zum starten.

BWBAR_DIRECTORY=/PATH_TO/bwbar
OUTPUT_DIRECTORY=/PATH_TO/bandwidth
MEASUREMENT_TYPE=3
DEVICE=eth0
INTERVAL=1
SHOW_PERCENT=0
MAX_IN=10000
MAX_OUT=10000

Beim ersten Start sollte es folgendermaßen aufgerufen werden.

cd /path/to/bwbar
sudo -u httpd ./total_restart

Bei jedem weiteren Start.

sudo -u httpd ./normal_restart



Bwbar als System-Dienst

Damit man bwbar wie die anderen System-Dienste auch mit den Befehlen service und chkconfig verwalten kann benötigt man ein Service-Script im Ordner /etc/init.d, welches den Konventionen entspricht. Folgendes Script funktioniert auf einem LFS-System. Eventuell sind anpassungen nötig, als Vorlage kann man ein Initscript seiner Distribution benutzen und die entsprechenden Teile anpassen.

#!/bin/bash
# SysV initscript for bwbar
# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten for bwbar by Arne Brodowski <arne_at_planet-rcs.de>
source /etc/sysconfig/rc
source $rc_functions
source /etc/bwbar_config

case "$1" in
        start)
                echo "Starting bwbar..."
                su traffic -c "$BWBAR_DIRECTORY/rcsbwbar \
                --output-file $OUTPUT_DIRECTORY/$INDEX_FILENAME \
                --time-file $OUTPUT_DIRECTORY/time.txt \
                --agg-file $OUTPUT_DIRECTORY/agg.txt \
                --measurement $MEASUREMENT_TYPE \
                --interval $INTERVAL \
                --device $DEVICE \
                --brief-mode $BRIEF_MODE \
                --max-in $MAX_IN \
                --max-out $MAX_OUT \
                --show-percent $SHOW_PERCENT &"
                evaluate_retval
                ;;

        stop)
                echo "Stopping bwbar..."
                killproc rcsbwbar
                ;;

        restart)
                $0 stop
                sleep 1
                $0 start
                ;;

        status)
                statusproc rcsbwbar
                ;;

        fullrestart)
                echo "Fullrestart of bwbar..."
                killproc rcsbwbar
                echo "0 0 0 0 0" > $OUTPUT_DIRECTORY/agg.txt
                date +'%A, %d-%b-%Y %T %Z' > $OUTPUT_DIRECTORY/time.txt
                su traffic -c "$BWBAR_DIRECTORY/rcsbwbar \
                --output-file $OUTPUT_DIRECTORY/$INDEX_FILENAME \
                --time-file $OUTPUT_DIRECTORY/time.txt \
                --agg-file $OUTPUT_DIRECTORY/agg.txt \
                --measurement $MEASUREMENT_TYPE \
                --interval $INTERVAL \
                --device $DEVICE \
                --brief-mode $BRIEF_MODE \
                --max-in $MAX_IN \
                --max-out $MAX_OUT \
                --show-percent $SHOW_PERCENT &"
                evaluate_retval
                ;;

        *)
                echo "Usage: $0 {start|stop|restart|status|fullrestart}"
                exit 1
                ;;
esac


Archivierung des Traffics

Mit Hilfe eines kleinen Shell-Scriptes wollen wir nun dafür sorgen, den verbrauchten Traffic monatlich zu archivieren und den Zähler auf Null zurückzusetzen. Das Script trafficsaver.sh hat folgenden Inhalt:

#!/bin/bash
# script to save the html page created by bwbar
# use this script with cron
# written by Arne Brodowski
# <arne_at_planet-rcs_dot_de>

TRAFFILE="/home/httpd/bwbar/index.html"
ARCHIVDIR="/var/local/traffic"
TRAFURL="https://yourdomain/bwbar/index.html"

cp $TRAFFILE $ARCHIVDIR/`date +%d_%m_%Y`_plain
wget -q -O $ARCHIVDIR/`date +%d_%m_%Y`_wget $TRAFURL

/usr/bin/service bwbar fullrestart

Dieses Shell-Script speichert pro Aufruf zwei Dateien. Einmal die unverarbeitete html-Datei, wie sie der Webserver sieht und einmal die html-Datei, wie man sie im Webbrowser sehen würde, also mit ausgeführtem PHP- bzw. SSI-Code. Das ist natürlich eigentlich doppelt, wem das nicht gefällt kann das Script ja für seine Bedürfnisse anpassen.
Als Cron-Job eingetragen (crontab -e) lässt man das Script einmal zum Monatswechsel laufen.
0 0 1 * * /root/trafficsaver.sh

So erhällt man im Ordner /var/local/traffic mit der Zeit ein Archiv von html-Seiten, die den Trafficverbrauch dokumentieren. Mit ein paar Zeilen awk lassen sich dann Reports generieren.

Folgendes Script (/var/local/auswertung.sh) benutzen wir:
#! /bin/sh
# show traffic from the log files

FILES=./traffic/*plain

for file in $FILES; do
    TRAFFIC=`cat $file | grep Total | awk -F, '{print $3}' | awk '{print  $1" "$2}'`
    DATE=`echo $file | awk -F/ '{print $3}' | awk -F_ '{print $3"/"$2"/"$1}'`
    echo $DATE : $TRAFFIC
done


Aufgerufen als
auswertung.sh | sort -rn
erhällt man dann eine Aufstellung über den verbrauchten Traffic nach Monaten geordnet.

Auszugsweise sieht das dann in etwa so aus:
2005/07/01 : 17.795 GB
2005/06/01 : 18.580 GB
2005/05/01 : 21.020 GB
2005/04/01 : 29.991 GB


Fazit

Mit etwas Arbeit kann man mit bwbar eine umfangreiche Traffickontrolle realisieren, die sowohl einen Echtzeitstatus als auch einen monatlichen Report beinhaltet.

 


 

Vielleicht auch interessant:


Über den Autor

Robert programmiert Webanwendungen in ASP, kennt sich bestens im IRC und mit Eggdrops aus und schreibt auch darüber Artikel auf planet-rcs.de

Feedback