Webalizer
Webalizer wertet Log-Files für Web-Server aus und stellt das Ergebnis in WEB-Seiten dar. Verfügt man über mehrere virtuelle Hosts, muss jeder Host eine eigenes Log-File besitzen.
Folgendes Script erzeugt die notwendigen Verzeichnisse und passt die Definition der VHosts an. (Getestet unter OpenSuSE 11.4 mit Apache2)
#!/bin/sh
# Konfigurieren der Apache Logs und des Webalizers,
# um mehrere virtuelle VHosts zu analysieren.
# Jeder Host schreibt dazu seine Log-Daten in ein eigenes
# Access Log unter /var/log/apache/vhosts/<ServerName>/access_log.
# Das Ergebnis der Analyse wird in das Verzeichnis
# DocumentRoot/webalizer des Virtuellen Host geschrieben.
#
# Aktuelle Datum für Dokumentaion
DATE=`date +%Y-%m-%d`
# Temp. Script Datei für sed
SED=`mktemp /tmp/XXXXXX.sed`
#
# Suchen aller ServerNamen und erstellen der Verzeichnisse
# für jeden vhosts
#
for ServerName in `cat /etc/apache2/vhosts.d/*.conf | grep -i ServerName | sed 's#.*ServerName *\([^ ]*\).*#\1#'`
do
### Nur, wenn für den vhost noch keine Logs existieren.###
if [ ! -d "/var/log/apache2/vhosts/${ServerName}" ]
then
# Anlegen der Verzeichnisse für die access_log Dateien
mkdir -p "/var/log/apache2/vhosts/${ServerName}"
# Verzeichnis für die Webalizer *.conf Dateien anlegen
mkdir -p "/etc/webalizer.d"
# Anlegen der Verzeichnise für den Webalizer Output
mkdir -p "/srv/www/htdocs/webalizer/${ServerName}"
# Erstellen der Webalizer Konfigurationen
cat > "/etc/webalizer.d/${ServerName}.conf" <<EOCONF
#####################
# Webalizer Config
# Generiert mit configure_webalizer
# Author: Thomas Arend, Rheinbach
# Stand: ${DATE}
#####################
HistoryName webalizer.hist
Incremental yes
IncrementalName webalizer.current
HostName ${ServerName}
LogFile /var/log/apache2/vhosts/${ServerName}/access_log
OutputDir /srv/www/htdocs/webalizer/${ServerName}
PageType htm*
PageType cgi
PageType php*
HTAccess yes
DNSCache dns_cache.db
DNSChildren 10
HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.png
HideURL *.PNG
HideURL *.ra
#####################
EOCONF
fi
echo -e "/ServerName ${ServerName}/ {" >>"$SED"
echo -e "n" >>"$SED"
echo -e "i\\" >>"$SED"
echo -e " CustomLog /var/log/apache2/vhosts/${ServerName}/access_log combined" >>"$SED"
echo -e "}" >>"$SED"
done
#
# Nun müssen wir noch das sed-Script auf alle vhosts anwenden.
#
# Beachte:
# Es können mehrere vhosts in einer .conf definiert sein.
#
# Die neue Konfiguration steht anschließend in der Datei .conf.new
#
pushd "/etc/apache2/vhosts.d"
for CF in *.conf
do
cp "$CF" "$CF.${DATE}.old"
# Erst alte CustomLog Einträge löschen und
# dann neue einfügen.
sed '/CustomLog/d' "${CF}.${DATE}.old" \
| sed -f "$SED" > "${CF}.new"
done
popd