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.
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
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");
gcc bwbar.c -o bwbar
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
cd /path/to/bwbar sudo -u httpd ./total_restart
sudo -u httpd ./normal_restart
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
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
0 0 1 * * /root/trafficsaver.sh
#! /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
auswertung.sh | sort -rnerhällt man dann eine Aufstellung über den verbrauchten Traffic nach Monaten geordnet.
2005/07/01 : 17.795 GB 2005/06/01 : 18.580 GB 2005/05/01 : 21.020 GB 2005/04/01 : 29.991 GB
Mit etwas Arbeit kann man mit bwbar eine umfangreiche Traffickontrolle realisieren, die sowohl einen Echtzeitstatus als auch einen monatlichen Report beinhaltet.