Page 1 of 1

Globales VHOST-Logging

Posted: 2008-03-26 15:02
by jabba
Apache2, Debian Sarge

Problem:
Apache2 läßt sich nicht mehr starten, weil "to many files open". Es sind einfach zu viele Logfiles offen.
Je VHOST wird ein Log dieser Art erzeigt:
CustomLog /var/log/apache2/domain.de-combined.log combined
Obwohl nur ca. 150 VHOST auf der Maschine existieren, gibt es tausende offener Files. Das hängt scheinbar auch mit der Apachekonfiguration zusammen (MinSpareServers etc.).

Jetzt möchte ich versuchen ein globales Vhost-Logfile zu nutzen.

in apache2.conf definiert:
LogFormat "%v %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" vhost
Das ist die normale "combined"-Definition, vorne ergänzt um %v
Später möchte ich mit dem Apache-Script "split-logfile" das globale Log auf einzelne Files verteilen, so das je VHOST ein Log entsteht, welches z.B. dann mit awstats verarbeitet werden kann.

Für die Vhosts gibt es bislang eine eigene Datei, die includet wird. Dort steht bislang:
<VirtualHost xxx.xxx.xxx.xxx:80>

#
SuexecUserGroup vu2001 vu2001
#
ServerAdmin root@domain.de
DocumentRoot /var/www/virtual/domain.de/htdocs

ServerName domain.de
ServerAlias http://www.domain.de domain.de

CustomLog /var/log/apache2/domain.de-combined.log combined
....
</VirtualHost>
Das dortige Log soll entfernt werden und einmal global soll es heissen:
CustomLog /var/log/apache2/access-combined.log vhost
WO muss dieser Eintrag stehen?
Wenn ich es außerhalb eines VHOST-Containers versuche, wird nichts geloggt!

Re: Globales VHOST-Logging

Posted: 2008-03-26 15:12
by oxygen
Erhöhe besser die Anzahl der erlaubten Filehandles. Sonst wirst du später aus anderen Gründen an diese Grenze stoßen.

Deine Konfigurationsoptionen sehen richtig aus. Steht deine Logformat direktive auch außerhalb von Containern?
Ansonten kannst auch mal
CustomLog /var/log/apache2/access-combined.log "%v %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""
probieren.

Re: Globales VHOST-Logging

Posted: 2008-03-26 15:31
by jabba

Code: Select all

  CustomLog /var/log/apache2/access-combined.log vhost
steht innerhalb:

Code: Select all

<VirtualHost *>
	ServerAdmin webmaster@localhost
	
	DocumentRoot /var/www/
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
		# This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
		RedirectMatch ^/$ /apache2-default/
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
 	#LogLevel warn
       [b]CustomLog /var/log/apache2/access-combined.log vhost[/b]

#	CustomLog /var/log/apache2/access.log combined
	ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
Das dortige globale error-Log funktioniert, aber nicht das CustomLog!

Re: Globales VHOST-Logging

Posted: 2008-03-26 15:35
by freddy36
In nem <VirtualHost> Container ist es auch nicht global... Das das error log funktioniert liegt vermutlich daran das das Standard ist ;)

Re: Globales VHOST-Logging

Posted: 2008-03-26 15:43
by jabba
Bin jetzt ein Schritt weiter!
Wenn ich das Logging direkt in die apache2.con eintragen, dann loggt er alle Web mit dem Default USer www-data.
Die Vhosts haben aber eigene Systemuser ud diese Webs werden nicht geloggt.

Vielleicht liegt es auch daran, das die Vhosts IP-based sind?
<VirtualHost xxx.xxx.xxx.xxx:80> ??

Re: Globales VHOST-Logging

Posted: 2008-03-26 16:30
by oxygen
Wenn du die Logfiles für die einzelnen Webs nicht deaktiviert hast, werden sie nicht im globalen geloggt. Dieses Logfile enthält alle Einträge die woanders nicht geloggt werden.

Re: Globales VHOST-Logging

Posted: 2008-03-26 16:50
by freddy36
Jabba wrote:Vielleicht liegt es auch daran, das die Vhosts IP-based sind?
<VirtualHost xxx.xxx.xxx.xxx:80> ??
Nein, die log Einträge in den VirtualHost Containern müssen raus...

Re: Globales VHOST-Logging

Posted: 2008-03-26 17:18
by jabba
Ja so ist es. Konnte ich verifizieren.
Sobald auch nur eine Loganweisung in einem Vhost steht, gibt es kein globales Log mehr.
Gut, damit habe ich nun eine Basis, um das eigentliche Problem der zu vielen offenen Filehandles angehen zu können!

Re: Globales VHOST-Logging

Posted: 2008-03-28 13:08
by djcrackman
Wenn du genügend Ressourcen übrig hast, würde sich auch ein Logging in einer *SQL-Datenbank anbieten - beachte aber dabei, dass der Apache dann von der DB abhängig ist und nicht mehr startet, wenn der *SQLd tot ist.

Re: Globales VHOST-Logging

Posted: 2008-03-28 13:18
by jabba
Loggen in MySQL? Nein besser nicht, die DB ist schon arg genug strapaziert und außerdem brauchen wir die Logfiles als Datei für die Weiterverarbeitung.

Wir haben mittlerweile alle Probleme lösen können.
Es wird ein globales Log erzeugt und stündlich mit dem split-lofile des Apachen die Logfiles generiert, die dann letztlich weiterverarbeitet und rotiert werden. Das globale Log wird nach dem Splitten entfernt und neu angelegt.
Soweit ich das bislang beurteilen kann läuft das gut und schnell genug und es sind schlagartig mehrere zehntausend offene Files weniger!

Warum der Apache derartig viele offene Files verwaltet bleibt ein Rätzel.