|
ServerstatistikUnix-Tools- http-analyze:Das Programm von Stefan Stapelberg vereint viele Funktionen andererStatistikprogramme -- und ist freie Software.
http://www.netstore.de/Supply/http-analyze/ - Sawmill:(früher Chartreuse Cartouche) kann beliebige Logdate-Formatelesen und detaillierte grafische Statistiken liefern. Es kann als CGI-Programm die Statistik auch "on-the-fly" liefern. Konfigurationüber ein WWW-Interface.
http://www.flowerfire.com/sawmill/ - The Webalizer:schnelles, freies Analyseprogramm, das die Statistiken im HTML-Format ablegt.Für verschiedene Logformate. Detaillierte Statistiken.
http://www.webalizer.org/
- Checklog:ist ein einfaches Perl-Skript zum Generieren von Reports. Das Programmversucht zu ermitteln, wie viele Personen den Server besuchen und wietief sie in die Seiten gehen.
http://www.rpg.net/help/checklog - wusage:ist ein C-Programm zum Generieren von grafischen Logfile-Statistiken.Läuft auf verschiedenen Plattformen.
http://www.boutell.com/wusage/ - getstats:
ist ein C-Programm zum Generieren von detaillierten Statistiken (stündlich,
täglich, wöchentlich, monatlich, nach Domain etc.).
Getgraph produziert dann grafische Darstellungen der Reports.
http://www.uu.se/Software/Getstats/
- Analog:
arbeitet ähnlich wie getstats, ist jedoch schneller und hat ein etwas
unterschiedliches Ausgabeformat. Konfigurierbar und mehrsprachig.
http://www.analog.cx/
- W3Perl:
ist ein grafisches Statistikpaket, das in Perl geschrieben wurde.
Es erhebt den Anspruch, das umfassendste und umfangreichste Server-Statistik-Tool
zu sein.
http://www.w3perl.com/
- WWWStat:
erzeugt die Serverstatistiken im HTML-Format. Dateinamen müssen im
Quelltext (Perl) angepaßt werden. Verschiedene Möglichkeiten der Statistik-Ausgabe.
http://www.ics.uci.edu/WebSoft/wwwstat/
- BrowserCounter:
ist ein Agent Log Analyzer. Das Programm listet alle Browser auf, die den
Server besucht haben.
http://www.nihongo.org/snowhare/utilities/browsercounter.html
- Summary:
erlaubt in der Profi-Version Sub-Reports für virtuelle Domains, liefert
umfangreiche Reports (auch für Referrer) und erlaubt den Export der Daten.
http://www.summary.net/summary.html
Plattformunabhängige Tools
- Bazaar Analyzer
Ein Logfile-Analysator, der mit jedem Java-fähigen Browser funktioniert.
Viele Features und Grafikausgabe. Die Standardversion ist kostenlos.
- 3D UWwebmon
ist ein Java-Applet das mit jedem Java-fähigen Browser funktioniert.
Grafikausgabe, konfigurierbar.
- WatchWise
erlaubt Echtzeit-Analyse und -statistik, verwendet eine eigene Datenbank.
- Webtrax
ist ein freies Perl-5-Programm für das NCSA Combined log format.
Einfache Statistik-Tools
Wenn es nur um eine übersicht geht oder wenn nur ganz bestimmte Dateien statistisch
untersucht werden sollen, dann geht es sogar mit "Bordmittteln". Um nur
die Anzahl von Abrufen zu ermitteln, genügt ein Shellskript. Das folgende
Mini-Script soll Ihnen zeigen, wie einfach das ist. Voraussetzung für das
Gelingen ist die Verwendung der GNU-Versionen der Programme. Das Script muß
zudem am ersten Tag des Monats aufgerufen werden. Es liefert dann die Statistik
für den vergangenen Monat. Die Ergebnisse werden in eine Datei geschrieben, deren
Name durch die Variable DATEI vorgegeben ist. Die Variable SUCH
gibt ein Suchmuster für die Dokumentennamen vor. Dies kann ein Namensteil einer
Datei oder ein Pfadname sein, z.B. index -- definiert als regulärer Ausdruck.
Der sed-Aufruf entfernt Dateipfade und andere unnötige Dinge aus der
Eingabe. Gegebenenfalls müssen Sie das Skript Ihren Wünschen anpassen.
#!/bin/sh
# Zugriffsstatistik
#
DATEI=/home/httpd/stat/stat.txt
{
cd /home/httpd/stat
echo ""
echo "abgerufene Dokumente `date --date '1 days ago' '
echo "-----------------------------"
echo ""
echo " Anz. Datei"
echo ""
grep "$SUCH" /var/log/httpd.access_log | \
grep "$AKT" | \
sed -e 's?^/.*/??' -e 's?^/??' -e 's? HTTP.*$??' | \
grep ".html" | \
sort | \
uniq -c
} > $DATEI
Etwas komfortabler ist die Statistik, die das folgende Perl-Programm liefert.
Die umfangreicheren Statistikprogramme liefern oft nur Zusammenfassungen
und die am häufigsten abgerufenen Seiten. Aus dem Skript unten kann man
sich auch durch ein paar kleine Änderungen eine maßgeschneiderte Statistik
für ganz bestimmte Seiten anfertigen. Dazu kann man die Variablen
\$include und \$exclude mit geeingeten regulären Ausdrücken
belegen. Die Balkengrafiken werden durch kleine Tabellen erzeugt, deren Maße
vom Programm entsprechend der Statistik berechnet werden.
#!/usr/bin/perl
# Die folgenden Variablen muessen an die lokale Konfiguration
# angepasst werden.
# Zeichenkette(n), die in der Protokollzeile auftauchen muessen.
#
# Sie koennen auch mehrere Strings angeben, z.B.
# $include="laber/eins|laber/zwei";
#
# $include = "ALL"; nimmt alle Protokollzeilen, mit Ausnahme der
# durch $exclude ausgeschlossenen.
$include="ALL";
# Protokollzeilen, die diese Strings enthalten, werden
# bei der Berechnung der Statistik ausgeschlossen
# (hier: Graphiken und Aufrufe von CGI Programmen).
#
# Mehrere Strings wieder durch "|" trennen.
$exclude = "gif|jpg|png|cgi";
# Name und Pfad der Webserver-Logdatei
$LOGDATEI = "/var/log/any-access_log";
# Farbe der Balken fuer die Stundenstatistik
$scolor = "#FFFF00";
# Farbe der Balken fuer die Tagesstatistik
$wcolor = "#FF00FF";
# Das wars! Ab hier muss nichts mehr geaendert werden!
###################################################
&datum;
&open_logfile;
&calc_access;
𝕜
&general;
&by_hour;
&by_date;
&by_html;
&fuss;
sub open_logfile
# Server-Logdatei oeffnen
{
open (LOG,"$LOGDATEI") || die "Kann $LOGDATEI nicht oeffnen!\n";
while ($line = <LOG>)
{
chomp($line);
if ((($line = /$include/) || ($include eq "ALL"))
&& ($line ! /$exclude/i))
{ push(@lines,$line); }
}
close(LOG);
}
sub calc_access
# Daten aus der Logdatei extrahieren
{
$i = 0;
$currentdate = "";
foreach (@lines)
{
($site,$j1,$j2,$when,$j3,$j4,$page,$j5,$number,$bytes) = split;
$page= s/ ($date,$hour,$minute,$second)=split(':',$when);
$hour= s/^0//;
# Wenn Datum gleichbleibt, inkrementiere Counter fuer dieses Datum
if ($date eq $currentdate)
{ $counter[$i]++; }
# Naechster Tag (Tageszaehler ist die Variable $i)
else
{
$i++;
$currentdate=$date;
$counter[$i]++;
}
($firstdate) || ($firstdate=$date);
($day,$month,$year) = split('/',$date);
$date = "$year/$month/$day";
$date= s/\[//;
$dates{$date}++; # Anzahl Zugriffe pro Tag
$hours{$hour}++; # Anzahl Zugriffe pro Stunde
$pages{$page}++; # Anzahl Zugriffe pro FILE
$totalbytes = $totalbytes + $bytes;
}
if ($totalbytes < 10)
{
print "<html><head>\n";
print "<title>Keine Abrufe für $include.</title>\n";
print "</head><body>\n";
print "<h1 align=center>Keine Abrufe für $include.</h2>\n";
print "Für das Verzeichnis (die Verzeichnisse) <b>$include</b>\n",
print "wurden im letzten Monat keine Abrufe verzeichnet.\n";
print "</body></html>\n";
exit;
}
}
sub kopf
# Seitenkopf, kann erweitert/angepasst werden
{
print "<HTML>\n";
print "<head><title>Zugriffs-Statistik</title></head>\n";
print "<body bgcolor=\"#ffffff\" text=\"#000000\"\n";
print "link=\"#0000ff\" vlink=\"#cc00cc\">\n";
if ($include eq "ALL")
{ print "<H2 ALIGN=CENTER>Zugriffstatistik</H2>\n"; }
else
{ print "<H2 ALIGN=CENTER>Zugriffstatistik für $include</H2>\n"; }
print "<H4 ALIGN=CENTER>$long_date</H4>\n";
}
sub general
# allgemeine Statistikwerte
{
$firstdate= s/\[//;
$firstdate = s/^0//;
print "<H2>Allgemeine Daten</H2>\n";
print "<B>Auswertungszeitraum:</B> $firstdate bis $date_2<BR>\n";
print "<B>Gesamtzahl aller Zugriffe:</B> $#lines <BR>\n";
print "<B>Gesamtvolumen (in Bytes):</B> $totalbytes <BR>\n";
}
sub by_hour
# Stunden-Statistik berechnen
{
print "<H2 ALIGN=CENTER>Zugriffsstatistik nach Tageszeit</H2>\n";
print "<TABLE BORDER=1 CELLPADDING=3 ALIGN=CENTER><TR><TD>\n";
print "<TABLE BORDER=0 CELLPADDING=3 ALIGN=CENTER>\n<TR>";
$highest=0;
# ermittle maximale Anzahl von Zugriffen zu einer Stunde
foreach $key (keys {
if ($hours{$key} > $highest)
{ $highest=$hours{$key}; }
}
foreach $key (keys {
$barsize{$key} = int(($hours{$key} * 250) / $highest);
}
foreach $key (0..23)
{
if ($barsize{$key} < 2)
{ $barsize{$key} = 2; }
print "<TD ALIGN=CENTER VALIGN=BOTTOM>\n";
print "<I>$hours{$key}</I><BR>\n";
# als einspaltige Tabelle mit variabler Hoehe realisiert
print "<TABLE BORDER=0 BGCOLOR=\"$scolor\"\n";
print " HEIGHT=$barsize{$key} WIDTH=10>\n";
print "<TR><TD>&nbsp;</TD></TR></TABLE>\n";
print "</TD>\n";
}
print "</TR>\n<TR>\n";
foreach $key (0..23)
{
print "<TH ALIGN=CENTER>$key</TH>\n";
}
print "</TR>\n<TR>\n";
print "<TH ALIGN=CENTER colspan=24>Uhrzeit</TH>\n";
print "</TR>\n";
print "</TABLE>\n";
print "</TD></TR></TABLE>\n\n";
}
sub by_date
# Tages-Statistik berechnen
{
$highest=0;
undef foreach $key (keys {
if ($dates{$key} > $highest)
{ $highest=$dates{$key}; }
}
foreach $key (keys {
$barsize{$key} = int(($dates{$key} * 350) / $highest);
}
print "<H2 ALIGN=CENTER>Abrufstatistik der letzten 30 Tage</H2>\n";
print "<TABLE BORDER=1 CELLPADDING=3 ALIGN=CENTER><TR><TD>\n";
print "<TABLE ALIGN=CENTER BORDER=0 CELLPADDING=3>\n";
foreach $tag (sort {$a cmp $b} (keys {
print "<TR><TD ALIGN=RIGHT VALIGN=MIDDLE><TT>$tag</TT></TD>\n";
print "<TD><B>$dates{$tag}</B></TD>\n";
print "<TD ALIGN=LEFT VALIGN=MIDDLE>\n";
# Balken wird als einzeilige Tabelle mit variabler Breite realisiert
print "<TABLE BORDER=0 BGCOLOR=\"$wcolor\"\n";
print " HEIGHT=20 WIDTH=$barsize{$tag}>\n";
print "<TR><TD>&nbsp;</TD></TR></TABLE></TD>\n";
print "</TR>\n";
}
print "</TABLE>\n";
print "</TD></TR></TABLE>\n\n";
}
sub by_html
# Zugriffs-Statistik aller Seiten
{
print "<H2 ALIGN=CENTER>Zugriffe pro HTML-Seite</H2>\n";
print "<TABLE BORDER=1 CELLPADDING=3>\n";
# sortiere die WWW-Seiten vor der Augabe
foreach $page (sort(keys {
$page= s/[<>]//g;
print "<TR><TD> <a href=$page>$page</a> </TD>";
print "<TD><B> $pages{$page} </B></TD></TR>\n";
}
print "</TABLE>\n\n";
}
sub fuss
# Seitenende, kann erweitert/angepasst werden
{
print "</body>\n";
print "</html>\n";
}
sub datum
# Datum in brauchbaren Formaten erzeugen
{
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
= localtime(time);
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mon < 10) { $mon = "0$mon"; }
if ($mday < 10) { $mday = "0$mday"; }
$month = $mon + 1;
$year = $year + 1900;
@months1 = ("Januar","Februar","Maerz","April","Mai",
"Juni","Juli","August","September","Oktober",
"November","Dezember");
@months2 = ("Jan","Feb","Mar","Apr","May","Jun","Jul",
"Aug","Sep","Oct","Nov","Dec");
$date_1 = "$mday.$month $year";
$date_2 = "$mday/$months2[$mon]/$year";
$long_date = "$mday\. $months1[$mon] $year ($hour\.$min Uhr)";
}
Zugriffe auswerten mit Webalizer
Es gibt diverse Programme zum Aufbereiten von
Server-Logdateien. Wie so oft ist die einfachste Lösung meist die beste.
Der Webalizer ist ein Opensource-Programm zur Darstellung der Zugriffsstatistiken
für eine Homepage. Er ist auf die unterschiedlichsten Plattformen portiert, z.B.
Linux auf PC, Alpha und PPC, Solaris auf Sparc oder Windows. Die
Auswertungsmöglichkeiten sind recht umfangreich und hängen davon ab,
wie die Konfigurationsdatei des Webalizers und die Konfigurationsdatei des
Webservers eingerichtet sind. Er kann zudem nicht nur für WWW-Logs, sondern
auch für die Squid- und FTP-Logdateien verwendet werden.
Das Programm liefert eine Webstatistik der letzten 12 Monate. In der Übersicht
sehen Sie die monatlichen Daten im Vergleich:
- Zusammenfassung des Monats,
- Tages-Statistik,
- Statistik nach Uhrzeiten,
- Auswertung nach abgerufenen Seiten,
- Liste der Rechner, die auf die Webseiten zugegriffen haben,
- Browsertypen
- und vieles mehr
In den meisten Distributionen ist der Webalizer enthalten. Im Netz
ist er über
http://www.webalizer.org/
erhältlich.
Dort stehen die Quellen und fertige Binaries für alle Plattformen zur
Verfügung, die nur entpackt werden müssen.
Die Unterstützung verschiedener Sprachen ist leider etwas archaisch, denn
es müssen die passenden Headerdateien einkompiliert werden -- es ist also
auch das komplette Quellpaket erforderlich. Für eine Installation in Deutsch
(und in anderen Sprachen) stellen z.B. die DLR oder
die schwedische Firma Chalmers die Quellen zum Download bereit.
http://www.suse-rpms.de/suse/7.2/Webalizer.html
Im Folgenden wird eine relativ einfache Konfiguration beschrieben. Webalizer
bietet darüber hinaus weitere Features, die in der beiliegenden
Dokumentation beschrieben sind.
Wer die Installation mittels der Quell-Dateien vornimmt, muß diese auf
normalem Wege mit der üblichen Befehlsfolge kompilieren. Die genaue Anleitung
mit den Optionen, die bei ./configure möglich sind, kann man in der
einfachen Installationsanleitung der Webalizer-Homepage nachlesen.
Konfiguration
Nach Installation des Webalizers enthält das Verzeichnis eine
Standard-Konfigurationsdatei, in der viele Optionen voreingestellt sind.
Andere sind auskommentiert, so daß man sie bei Bedarf nur aktivieren muß.
Für den größten Teil der Optionen existiert eine Default-Einstellung, so
daß prinzipiell kein Eintrag in der .conf-Datei nötig ist.
Es werden hier nur die wichtigsten Optionen der Konfigurationsdatei besprochen.
Die Datei heißt standardmäßig webalizer.conf und sollte, damit sie
beim Start des Webalizers ohne Pfadangabe gefunden wird, am besten in /etc/
stehen. Um sie zu benutzen, wird der Durchlauf dann einfach mit webalizer
gestartet. Benutzt man verschiedene Konfigurationsdateien für verschiedene
Aufgaben, so muß außer bei Benutzung von /etc/webalizer.conf als
Konfigurationsdatei dem Programm stets der Pfad mit der Option -c
mitgegeben werden. So lassen sich beispielsweise für jeden virtuellen
Server getrennte Statistiken erstellen.
Nun wird die Konfigurationsdatei mit dem Editor bearbeitet. Suchen Sie die Zeile:
#LogFile /var/lib/httpd/logs/access\_log
Entfernen Sie das Kommentarzeichen (#) und ersetzen Sie die Pfadangabe mit
dem Pfad zu Ihrem Apache-Logfile. In der Konfigurationsdatei muß angegeben werden,
welche Logdatei benutzt werden soll, d.h. es gibt hier keine Voreinstellung.
LogFile /var/log/httpd/access\_log
Es gibt mehrere Logfile-Formate, die benutzt werden können, das Standardformat
heißt clf. Ebenso funktioniert der Durchlauf mit gezippten Logfiles
im gz-Format, was man vielleicht nutzen möchte, weil man ab und zu
große Logfiles packen will, um Plattenplatz zu sparen.
Dann sollten Sie das Verzeichnis angeben, in dem die Ergebnisse gespeichert werden
sollen. Suchen Sie nun die Zeile:
#OutputDir /var/lib/httpd/htdocs/usage
Entfernen Sie das Kommentarzeichen und ersetzen Sie die Pfadangabe mit der
zu dem Verzeichnis, in dem Sie die Berichte ablegen möchten. Dieses
sollte sich in Ihrem Webverzeichnis befinden. Zum Beispiel:
OutputDir /opt/www/htdocs/webalizer
Es empfiehlt sich natürlich, eigene Verzeichnisse für die Ausgabe zu erstellen. Falls
man mit verschiedenen Konfigurationsdateien verschiedene Jobs erledigt, sollte man
natürlich auch in der jeweiligen .conf-Datei das jeweilige Ausgabeverzeichnis
angeben, da sonst Daten überschrieben werden oder, je nach Einstellung, neue Daten
an solche angehängt werden, die überhaupt nicht dazu passen.
Suchen Sie dann die Zeile:
#Incremental no
Entfernen Sie das Kommentarzeichen und ersetzen Sie "no" durch "yes".
Hiermit weisen Sie Webalizer an, den Stand des Logfiles zu speichern
und beim nächsten Aufruf an dieser Stelle fortzusetzen.
Suchen Sie die Zeile
#ReportTitle Usage Statistics
Entfernen Sie das Kommentarzeichen und ersetzen Sie den Eintrag durch einen
Titel Ihrer Wahl. Suchen Sie dann die Zeile
#HostName localhost
Entfernen Sie das Kommentarzeichen und tragen Sie Ihren Hostnamen ein.
Danach folgen viele eher unwichtige bzw. defaultmäßig richtig oder
sinnvoll eingestellte Parameter (siehe Holzmann/Plate). Speichern Sie
die Datei webalizer.conf.
Ausführen
Die einfachste Methode ist der Start von Hand. Damit wird die Logdatei
ausgelesen und die HTML-Dateien mit der Serverstatistik in dem von Ihnen
angegeben Verzeichnis erstellt. Webalizer sucht seine Konfigurationsdatei
zuerst im aktuellen Verzeichnis und dann in /etc. Der Aufruf zum Test
könnte dann lauten:
webalizer -c /etc/webalizer.conf
Der manuelle Aufruf ist auf Dauer natürlich nicht besonders praktisch.
Besser ist da ein Eintrag für den Cron-Mechanismus. Man kann z.B. in die
Datei /etc/crontab folgenden Eintrag aufnehmen:
30 4 * * * root /opt/www/bin/webalizer > /dev/null 2>&1
Gegebenenfalls sind noch die Parameter -p für den inkrementellen
Modus oder -c file zur Angabe der Konfigurationsdatei nötig. Weitere
Parameter listet die Manualpage auf. Die Statistik rufen Sie mit Hilfe der Datei
index.html im durch OutputDir
spezifizierten Verzeichnis ab.
FTP-Statistik mit Webalizer
Der Webalizer ist auch in der Lage, die Informationen aus der Datei /var/log/transferlog
auszuwerten. Die Schritte dazu sind relativ einfach. Zuerst richten Sie analog dem
Verzeichnis für die Webstatistiken ein weiteres Verzeichnis ein, z.B.
/opt/www/htdocs/ftpstats
Nun wird eine zweite Konfigurationsdatei erzeugt, die für die Analyse der FTP-Daten
angepaßt ist. Dazu kopieren Sie einfach die originale Datei /etc/webalizer.conf
auf /etc/ftpstats.conf und ändern diese Datei ab. Dabei sind nur drei Zeilen
zu modifizieren:
LogFile /var/log/xferlog
LogType ftp
OutputDir /opt/www/htdocs/ftpstats
Wichtig ist dabei besonders der LogType, damit Webalizer auch alles richtig
macht. Das Programm kennt zwei Typen "web" und "ftp", wobei "web" die
Voreinstellung ist. Mit dem Aufruf
webalizer -c /etc/ftpstats.conf
kann dann die FTP-Statistik abgerufen werden.
Proxy-Statistik mit Webalizer
Wenn Sie auch noch die Logdatei des Squid analysieren wollen, geht auch dies nach
dem gleichen Schema wie für FTP. Zuerst richten Sie analog dem Verzeichnis
für die Web- und FTP-Statistiken noch ein weiteres Verzeichnis ein, z.B.
/opt/www/htdocs/squidstats
Nun wird eine weitere Konfigurationsdatei erzeugt, die für die Analyse der Squid-Daten
angepaßt ist. Dazu kopieren Sie einfach die originale Datei /etc/webalizer.conf
auf /etc/squidstats.conf und ändern diese Datei ab. Dabei sind auch wieder nur
drei Zeilen zu modifizieren:
LogFile /var/squid/logs/access.log
LogType web
OutputDir /opt/www/htdocs/squidstats
Diesmal wird wieder der LogType "web" verwendet. Die Auswertung funktioniert aber
nur, wenn die Logdatei des Squid das richtige Format besitzt. Statt des Standardformats
der Squid-Logs muß der Squid seine Logdateien im "Apache-Stil" abliefern. Das
erreichen Sie durch die Einstellung emulate\_httpd\_log on in der
Datei squid.conf. Mit dem folgenden Aufruf kann dann die Proxy-Statistik
abgerufen werden:
webalizer -c /etc/squidstats.conf
|
|
|