Startseite > Plesk > Plesk mit globalem Apache Logging versehen

Plesk mit globalem Apache Logging versehen

In diesem Tutorial richtet man unter Plesk ein globales Apache Webserver Logging ein, was bei Problemfällen, z.B. hohe CPU Last als weiteres Informationsmittel verwendet werden kann.

Das Tutorial ist wie immer mit Verstand umzusetzen. Pfade / Funktionsweisen können bei euch gänzlich anders sein!

0. Einleitung

Ab und an habe ich das Problem das auf dem Server irgendwas komisches abläuft (hohe CPU Last etc pp). Neben den üblichen Informationsquellen (ps, htop, …) schaue ich mir auch gerne logfiles an. Leider ist es bei Plesk so gelöst das es keine globale Logdatei gibt und man die Logfiles der Vhosts alle einzeln durchgehen müsste. Ein reines Eintragen von globalen Logparametern funktionierte nicht, da der Traffic direkt auf die Vhostskonfiguration “umgeleitet” und interpretiert wird.

Ob dies sich mit Plesk9 geändert hat oder zukünftig noch ändern wird, oder ob es einen einfacheren Weg als der hier beschriebene gibt kann ich nicht sagen. Die beschriebene Methode setze ich seit 1-2 Jahren ein und damals habe ich kein besseren Weg gefunden.

Die Methode wurde ursprünglich unter Plesk 8.0 unter Debian 4 umgesetzt und funktioniert genauso unter Plesk 9.0 und Debian 5. – Bei anderen Distributionen sind vermutlich die Pfade anders.

1. Apache Konfiguration bearbeiten

Wir definieren ein neues Logformat. Dieses kann nach belieben angepasst werden.

/etc/apache2/vhost.conf bearbeiten:

    vi /etc/apache2/vhosts.conf

Nach LogFormat suchen und folgende Zeile einfügen:

    LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_global

2. Neue Apache Konfiguration anlegen

Wir legen eine neue Konfigurationsdatei an, welche von den Vhosts verwendet wird. Da diese Datei global ist, kann jederzeit eine Änderung vorgenommen werden, ohne immer wieder die Vhost Config Templates neuschreiben zu müssen. Zudem wird diese nicht von Updates (Apache/Plesk) überschrieben. Nach zukünftiger Änderung an der Datei muss der Apache neu gestartet werden

In das apache Verzeichnis wechseln und neue Datei /etc/apache2/vhosts_customers.conf anlegen:

    cd /etc/apache2/
    vi vhosts_customers.conf

Inhalt der /etc/apache2/vhosts_customers.conf:

    ErrorLog /var/log/apache2/global_error.log
    CustomLog /var/log/apache2/global_access.log combined_global

3. Script/Template in /opt/vhostconf/* anlegen


Diese Scripte dienen Dazu das alle Vhosts die oben erstelle /etc/apache2/vhosts_customers.conf mittels des /var/www/vhosts/DOMAIN.tld/conf/vhost.conf Templates erhalten. Das Script sollte regelmässig ausgeführt werden. Domains die bereits eine vhost.conf enthalten werden ignoriert, sprich die Datei wird nicht überschrieben. Bereits bestehende vhost.conf Dateien müssen eventuell manuell – mit dem Inhalt der unten erwähnten vhost.conf.default – angepasst werde.

Die /opt/vhostconf/vhost.conf.default dient als Template für die vhost.conf die mittels des Scripts den Domains/Vhosts zugeordnet wird. Diese kann auch noch weitere globale Parameter (wie z.B. für mod_deflate) beinhalten

Verzeichnis anlegen:

    mkdir /opt/vhostconf
    cd /opt/vhostconf
    vi vhostconf

Inhalt der /opt/vhostconf/vhostconf:

#! /bin/sh
ROOTPATH='/var/www/vhosts/'
for i in `ls -1 $ROOTPATH`;
do
    ROOTPATH_DOMAIN=$ROOTPATH$i
    DOMAINNAME=`echo $ROOTPATH_DOMAIN | awk -F \/ '{print $5}'`
    VHOSTFILE=$ROOTPATH_DOMAIN'/conf/vhost.conf'
    if [ ! -e $VHOSTFILE ] && [ $DOMAINNAME != 'chroot' ]  && [ $DOMAINNAME != 'default' ]
    then
        echo 'No vhosts.conf in '$DOMAINNAME
        cp vhost.conf.default $VHOSTFILE
    fi;
done;
  • ggf. den “ROOTPATH” anpassen. Dieser muss auf das Webverzeichnis eurer Domains zeigen.
  • /opt/vhostconf/vhost.conf.default anlegen:

        vi vhost.conf.default

    Inhalt der /opt/vhostconf/vhost.conf.default:

        Include /etc/apache2/vhosts_customers.conf

    4. Crontab anlegen

    Das oben erstellte Script /opt/vhostconf/vhostconf sollte in häufigen Intervallen aufgerufen werden, so dass alle neu erstellten Domains auch in die globale Logdatei mit einfliessen

        crontab -e

    Neuen Inhalt einfügen:

        1   *   *   *   *   cd /opt/vhostconf/ && ./vhostconf >/dev/null 2>&1
  • Der Cronjob ist mit 1 Minute irgendwie bescheuert gesetzt, ich weiß nicht warum ich das so gemacht habe. – Einfach nach eigenem Ermessen die Zeit setzen.
  • 5. Logrotate

    Ein Logrotate muss unter Debian nicht angelegt werden da /etc/logrotate.de/apache2 alle Logdateien unter /var/log/apache2/*.log abarbeitet

    6. PSA Websrvmng ausführen / Apache neustarten

    Nachdem der Cronjob durchgearbeitet wurde müssen noch folgende Zeilen ausgeführt werden, da sonst die geänderten Vhost Templates nicht übernommen werden

        /usr/local/psa/admin/bin/websrvmng -a
        /usr/local/psa/admin/bin/websrvmng -r
        /etc/init.d/apache2 restart
  • Ich führe 2x websrvmng -a, dann 2x websrvmng -r aus, weil ich manchmal den Fall hatte das erst beim 2. Mal die Templates geschrieben wurden. Aus dem gleichen Grund setze ich nicht beide Parameter in einem Befehl ab
  • Apache starte ich absichtlich auch nochmal neu, obwohl websrvmng -r dies tun sollte. Ab und an tut es das nicht
  • 7. Script manuell ausführen

    Das Script /opt/vhostconf/vhostconf sollte einmal ausgeführt werden, um alle Domains mit den Konfigurationsdateien zu versehen und das Schreiben in die globale Logdatei zu ermöglichen.

        /opt/vhostconf/vhostconf
        /usr/local/psa/admin/bin/websrvmng -a
        /usr/local/psa/admin/bin/websrvmng -r
        /etc/init.d/apache2 restart
  • /opt/vhostconf/vhostconf gibt alle Domains aus wo die Konfigurationsdatei geschrieben wurde. Domains welche schon eine vhost.conf haben werden nicht ausgegeben
  • 8. Logdatei testen

    Nachdem alles korrekt ausgeführt wurde sollte man – nach einem Apache Neustart schauen ob auch Inhalte in die /var/log/apache2/global_*.log Dateien geschrieben werden

        tail -f /var/log/apache2/global_access.log
        tail -f /var/log/apache2/global_error.log

    Andere / Alternative Methoden (Quickies)

    Folgende Einzeler sind alternative Methoden um alle Logfiles unter Plesk auszulesen, allerdings bereiten diese die Informationen leicht anders auf als eine einzige Logdatei. – Dank an Metty für die Informationen, daran habe ich überhaupt nicht gedacht.

    tail -f /srv/www/vhosts/*/statistics/log/access_log
    cat /srv/www/vhosts/*/statistics/log/access_log
    Categories: Plesk Tags: , , , , , , , , , ,
    1. Manuel Kauf
      22.01.2011 at 23:22 | #1

      Hi,

      gefaellt mir sehr gut =)

      kleine Anmerkung, /opt/vhostconf sollte noch mit chmod u+x ausführbar gemacht werden.

      Laeuft super mit Plesk10 bei mir.

      Die Kurzversion noch schnell für Debian
      tail -f /var/www/vhosts/*/statistics/logs/access_log
      (geht auch mit fail2ban so)

      gruß,
      Manuel

    2. 31.03.2011 at 23:12 | #2

      Hey Manuel,

      danke für Deine Ergänzungen.

    1. No trackbacks yet.

    Anti-Spam Protection by WP-SpamFree