Webalizer

Aus Thomas Wiki
Zur Navigation springen Zur Suche springen

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 virtuellen Host 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

Das folgende kleine Script my_webalizer.sh erzeugt die Statistiken für die einzelnen virtuellen Server.

#!/bin/sh

for CONF in /etc/webalizer.d/*.conf
do
  webalizer -c "$CONF"
done

Es empfiehlt sich, das Verzeichnis der Statistiken /srv/www/htdocs/webalizer/ vor unberechtigtem Zugriff zu schützen.