Loganalyse für virtuelle Hosts mit Webalizer


Webalizer ist ein Analysetool für Logdaten von Webservern (und auch FTP Servern). Installieren lässt es sich in der Regel mit Distributions Bordmitteln, z.B. Debian

[code]

apt-get install webalizer

[/code]

Wenn das Packet installiert ist hat man die möglichkeit eine oder mehrer Konfigurationsdateien im Verzeichnis /etc/webalizer zu erzeugen. Ich bin darüber gestolpert das der gröste Teil der configurationsoptionen bereits in der Webserverconfiguration enthalten ist – daher habe ich mir eine hilfe gebastelt die mir meine Webalizerumgebung möglichst automatisch für beliebige Virtuelle Apache Instanzen erzeugt.

Dazu zwei Überlegungen :

  1. Die Logdaten sollen in einem unterverzeichnis /logs/ über die Webseiten einsehbar sein
  2. Die Logdaten (auch die Webalizer-Ergebnisse) sollen nur nach eingabe von Passwort zugänglich sein

Diese Überlegungen und die vorangegangene Überlegung die von Apache2 angebotene Verzeichnis-Struktur für die Konfigurationsdateien nutzen zu wollen – mit einer Konfigurationsdatei pro Virtuelle Web Instanz – führte zu einem Bashscript mit dem als erstes eine Webalizer Konfigurationsdatei erzeugt wird (aus Daten der jeweiligen Apache “VirtualHost-Konfiguration” ) . Dann wird in dem Verzeichnis in dem die Log Files liegen und in dem Webalizer seine Reports für diese Domain ablegt eine .htaccess Datei erzeugt (Als Vorarbeit müssen entsprechende Passwort und Gruppendateien angelegt werden (in /etc/apache2/htpaswd und /etc/apache2/groups).

Das Bashscript wird in /etc/cron.daily/ vor dem Cron-Aufruf von Webalizer eingefügt.

[code]

ls -l /etc/cron.daily/

-rwxr-xr-x 1 root root 7949 Apr 3 21:37 7_pre_webalizer
-rwxr-xr-x 1 root root 1450 Jan 21 2007 8_webalizer
-rw-r–r– 1 root root 330 Apr 3 21:05 9_apache_logs
[/code]

Die Apache Konfigurationsdatei unter /etc/apache2/sites-enabled/ heisst www.neu.foo-new.de und sieht in etwa so aus :

[code]

# neue Homepage
<VirtualHost 192.168.1.1>
ServerAdmin webmaster@foo-new.de

DocumentRoot /vol1/foo/foo2

ServerName www.neu.foo-new.de
ErrorLog /vol1/foo/foo2/logs/error.log
CustomLog /vol1/foo/foo2/logs/access.log combined
#USER:user1:user2:user3

</VirtualHost>
[/code]

Das Bashscript sieht so aus :

[code]

#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin

APACHE_CONF=/etc/apache2/sites-enabled

# fuer jeden vhost eintrag eine
# webalizerkonfiguration erstellen
#

for APACHE_SITE in ${APACHE_CONF}/*; do

VHOST=$(echo $APACHE_SITE |cut -d / -f 5);
echo “Erstelle : ” $VHOST;

# webalizer config Datei
WEBALIZER_CONF=/etc/webalizer/$VHOST.conf;
rm /etc/webalizer/*.conf

echo “###### webalizer …” > $WEBALIZER_CONF;
echo -ne “### Erstelle: ” >> $WEBALIZER_CONF;
echo $VHOST >> $WEBALIZER_CONF;
echo -ne “### ” >> $WEBALIZER_CONF;
DATE=$(date +%d.%m.%Y);
echo $DATE >> $WEBALIZER_CONF;
echo “######” >> $WEBALIZER_CONF;
# auslesen der benoetigten Variablen
# aus der apache config
LOG_FILE=$(grep -i CustomLog $APACHE_SITE |sed -e ‘s/access.log.*$/access.log/’ -e ‘s/^.*/vol//vol/’ ) >> $WEBALIZER_CONF;
echo -ne “LogFile “$LOG_FILE”n” >> $WEBALIZER_CONF;

OUTPUT_DIR=$(grep -i CustomLog $APACHE_SITE |sed -e ‘s/access.log.*$//’ -e ‘s/^.*/vol//vol/’) >> $WEBALIZER_CONF;

echo -ne “OutputDir “$OUTPUT_DIR”n” >> $WEBALIZER_CONF;
echo -ne “HistoryName “$OUTPUT_DIR”webalizer.histn” >> $WEBALIZER_CONF;

echo “Incremental yes” >> $WEBALIZER_CONF;
echo -ne “IncrementalName “$OUTPUT_DIR”webalizer.currentn” >> $WEBALIZER_CONF;

REPORT_TITLE=$(echo $VHOST |sed -e ‘s/.foo-new.de//’) >> $WEBALIZER_CONF;
echo -ne “ReportTitle Statistiken – “$REPORT_TITLE”n” >> $WEBALIZER_CONF;
echo -ne “HostName “$VHOST”n” >> $WEBALIZER_CONF;
echo “DNSCache /tmp/dns_cache.db” >> $WEBALIZER_CONF;
echo “DNSChildren 20” >> $WEBALIZER_CONF;
echo “HourlyGraph yes” >> $WEBALIZER_CONF;
echo “GraphLines 6” >> $WEBALIZER_CONF;
echo “HourlyStats yes” >> $WEBALIZER_CONF;
echo “TopSites 30” >> $WEBALIZER_CONF;
echo “TopURLs 30” >> $WEBALIZER_CONF;
echo “TopReferrers 30” >> $WEBALIZER_CONF;
echo “TopAgents 15” >> $WEBALIZER_CONF;
echo “TopCountries 50” >> $WEBALIZER_CONF;
echo “HideSite *”$VHOST >> $WEBALIZER_CONF;
echo “HideReferrer “$VHOST”/” >> $WEBALIZER_CONF;
echo “HideReferrer Direct Request” >> $WEBALIZER_CONF;
echo “HideReferrer “$REPORT_TITLE >> $WEBALIZER_CONF;
echo “HideURL *.gif” >> $WEBALIZER_CONF;
echo “HideURL *.GIF” >> $WEBALIZER_CONF;
echo “HideURL *.jpg” >> $WEBALIZER_CONF;
echo “HideURL *.JPG” >> $WEBALIZER_CONF;
echo “HideURL *.png” >> $WEBALIZER_CONF;
echo “HideURL *.PNG” >> $WEBALIZER_CONF;
echo “HideURL *.ra” >> $WEBALIZER_CONF;
echo “MangleAgents 5” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “GroupURL /cgi-bin/*” >> $WEBALIZER_CONF;
echo “GroupSite *.aol.com” >> $WEBALIZER_CONF;
echo “GroupSite *.compuserve.com” >> $WEBALIZER_CONF;
echo “GroupSite *.compuserve.com” >> $WEBALIZER_CONF;
echo “GroupSite *.mcbone.net” >> $WEBALIZER_CONF;
echo “GroupSite *.t-dialin.net” >> $WEBALIZER_CONF;
echo “GroupSite *.t-online.de” >> $WEBALIZER_CONF;
echo “GroupSite *.t-ipconnect.de” >> $WEBALIZER_CONF;
echo “GroupSite *.mediaways.net” >> $WEBALIZER_CONF;
echo “GroupSite *.tiscali.de” >> $WEBALIZER_CONF;
echo “GroupSite *.arcor-ip.net” >> $WEBALIZER_CONF;
echo “GroupSite *.netcologne.de” >> $WEBALIZER_CONF;
echo “GroupSite *.skynet.be” >> $WEBALIZER_CONF;
echo “GroupSite *.wanadoo.fr” >> $WEBALIZER_CONF;
echo “GroupSite *.ignite.net” >> $WEBALIZER_CONF;
echo “GroupSite *.colt.net” >> $WEBALIZER_CONF;
echo “GroupSite *.hansenet.de” >> $WEBALIZER_CONF;
echo “GroupSite *.uu.net” >> $WEBALIZER_CONF;
echo “GroupSite *.reverse.qsc.de” >> $WEBALIZER_CONF;
echo “GroupSite *.surfer.at” >> $WEBALIZER_CONF;
echo “GroupSite *.hispeed.ch” >> $WEBALIZER_CONF;
echo “GroupSite *.highway.telekom.at” >> $WEBALIZER_CONF;
echo “GroupSite *.east.verizon.net” >> $WEBALIZER_CONF;
echo “GroupSite *.reverse.qdsl-home.de” >> $WEBALIZER_CONF;
echo “GroupSite *.netic.de” >> $WEBALIZER_CONF;
echo “GroupSite *.clara.net” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “GroupReferrer yahoo.com/” >> $WEBALIZER_CONF;
echo “GroupReferrer excite.com/” >> $WEBALIZER_CONF;
echo “GroupReferrer infoseek.com/” >> $WEBALIZER_CONF;
echo “GroupReferrer google.com/” >> $WEBALIZER_CONF;
echo “GroupReferrer google.de/” >> $WEBALIZER_CONF;
echo “GroupReferrer webcrawler.com/” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “GroupAgent MSIE” >> $WEBALIZER_CONF;
echo “GroupAgent Mozilla” >> $WEBALIZER_CONF;
echo “GroupAgent Lynx*” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “AllSearchStr yes” >> $WEBALIZER_CONF;
echo “TopUsers 5” >> $WEBALIZER_CONF;
echo “AllUsers yes” >> $WEBALIZER_CONF;
echo “AllURLs yes” >> $WEBALIZER_CONF;
echo “AllSites yes” >> $WEBALIZER_CONF;
echo “AllReferrers yes” >> $WEBALIZER_CONF;
echo “AllAgents yes” >> $WEBALIZER_CONF;
echo “AllSearchStr yes” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “GroupShading yes” >> $WEBALIZER_CONF;
echo “GroupHighlight yes” >> $WEBALIZER_CONF;
echo “MangleAgents 0” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “SearchEngine yahoo.com p=” >> $WEBALIZER_CONF;
echo “SearchEngine altavista.com q=” >> $WEBALIZER_CONF;
echo “SearchEngine google.com q=” >> $WEBALIZER_CONF;
echo “SearchEngine eureka.com q=” >> $WEBALIZER_CONF;
echo “SearchEngine lycos.com query=” >> $WEBALIZER_CONF;
echo “SearchEngine hotbot.com MT=” >> $WEBALIZER_CONF;
echo “SearchEngine msn.com MT=” >> $WEBALIZER_CONF;
echo “SearchEngine infoseek.com qt=” >> $WEBALIZER_CONF;
echo “SearchEngine webcrawler searchText=” >> $WEBALIZER_CONF;
echo “SearchEngine excite search=” >> $WEBALIZER_CONF;
echo “SearchEngine netscape.com search=” >> $WEBALIZER_CONF;
echo “SearchEngine mamma.com query=” >> $WEBALIZER_CONF;
echo “SearchEngine alltheweb.com query=” >> $WEBALIZER_CONF;
echo “SearchEngine northernlight.com qr=” >> $WEBALIZER_CONF;
echo “SearchEngine sensis.com.au find=” >> $WEBALIZER_CONF;
echo “SearchEngine google.nl q=” >> $WEBALIZER_CONF;
echo “SearchEngine google.fr q=” >> $WEBALIZER_CONF;
echo “SearchEngine google.ch q=” >> $WEBALIZER_CONF;
echo “SearchEngine google.ca q=” >> $WEBALIZER_CONF;
echo “SearchEngine google.be q=” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “DumpPath “$OUTPUT_DIR >> $WEBALIZER_CONF;
echo “DumpHeader yes” >> $WEBALIZER_CONF;
echo “DumpExtension csv” >> $WEBALIZER_CONF;
echo “DumpSites yes” >> $WEBALIZER_CONF;
echo “DumpURLs yes” >> $WEBALIZER_CONF;
echo “DumpReferrers yes” >> $WEBALIZER_CONF;
echo “DumpAgents yes” >> $WEBALIZER_CONF;
echo “DumpUsers yes” >> $WEBALIZER_CONF;
echo “DumpSearchStr yes” >> $WEBALIZER_CONF;
echo “# ” >> $WEBALIZER_CONF;
echo “GeoIP yes” >> $WEBALIZER_CONF;
echo “GeoIPDatabase /usr/share/GeoIP/GeoIP.dat” >> $WEBALIZER_CONF;

echo “HTMLTail <a href=”./”>zurück</a>” >> $WEBALIZER_CONF;
echo “HTMLPost <a href=”./”>zurück</a><!– confdate “$DATE” –>” >> $WEBALIZER_CONF;

# Userconfiguration
HTACCESS=$OUTPUT_DIR”.htaccess”;
echo “Erstelle : “$HTACCESS;
echo “######” > $HTACCESS;
echo “### .htacces “$DATE >> $HTACCESS ;
echo “######” >> $HTACCESS;
echo “AuthType Basic” >> $HTACCESS;
echo “AuthName “Statistiken: “$VHOST””” >> $HTACCESS;
echo “AuthUserFile /etc/apache2/htpasswd” >> $HTACCESS;
echo “AuthGroupFile /etc/apache2/group” >> $HTACCESS;
echo “require group foo4 foo5” >> $HTACCESS;
USERS_ALL=$(grep -i #USER $APACHE_SITE |sed -e ‘s/:/ /g’ -e ‘s/#USER//’);

echo “require user “$USERS_ALL >> $HTACCESS;

done
[/code]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.