[linux-l] apachelogs wohlgeordnet archivieren aus logrotate
Peter Ross
Peter.Ross at alumni.tu-berlin.de
Do Aug 7 08:46:41 CEST 2008
On Wed, 6 Aug 2008, Peter Ross wrote:
> On Wed, 6 Aug 2008, Thomas Feldhaus wrote:
>
> > Hallo,
>
> > grübele gerade bei lpi2 Kapitel 2.213.1 Automatisierungsskripte über dem
> > Lernziel "Synchronisieren von logs" mit rsync, scp. zum Beispiel
> > apachelogs: logrotate managt die Logs im Ringbufferverfahren in
> > /var/log/apache, dh. zerschneiden, im Ring verfahren umbenennen,
> > irgendwann die ältesten löschen, usw.
>
> > Jetzt will ich aber sämtliche apachelogs wohlgeordnet und an einem
> > passenden Ort aufbewahren. Aber das geht ja in der Form, wie logrotate
> > die Daten aufbereitet hat, nicht mehr so ohne weiteres.
>
> Eine andere Variante ist syslog-ng, dort kann man Schreiben nach
> /var/log/${host}/${datum} veranlassen. Wir benutzen das, inklusive der
> Benutzung zentraler Logserver (weitere Vorteile: Zugang zu vielen Daten
> zentral, Entkopplung von Produktionsservern, so Zugang für Entwickler
> unabhängig von Prod möglich, kein Auffüllen von /var-Partitionen..) - so
> wirklich sehr sehr hilfreich.
>
> Wir haben apache und tomcat so konfiguriert. Lokal läuft normales syslog,
> nur der Logserver braucht syslog-ng.
>
> Wenn Interesse besteht, schreibe ich morgen mehr, wenn ich Zugang zu den
> Servern habe.
Okay, hier die Schritte:
beim Client:
1. Syslogd muß weiterleiten können, wird mit folgenden Optionen gestartet:
SYSLOGD_OPTIONS="-m 0 -h -r" # Bei Red Hat unter /etc/sysconfig/syslog
2. /etc/syslog.conf konfiguriert, daß die Daten zum Syslogserver kommen
local0.* @logserver
local1.* @logserver
..
local6.* @logserver
3. Apache errorlog zu syslog
ErrorLog syslog:local1 # in /etc/httpd/conf/httpd.conf oder include
4. Apache accesslog zu einem Skript, welches an syslog weiterleitet:
CustomLog | httpd_access2syslog.pl combined_t
5. Das Perl-Skript httpd_access2syslog.pl
#!/usr/bin/perl
use Sys::Syslog qw( :DEFAULT setlogsock );
setlogsock('unix','/dev/log');
openlog('apache', 'cons', 'local1');
while ($log = <STDIN>) { syslog('info', "%s", $log);}
closelog
6. Für Tomcat in den log4j.properties:
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%-5p %d [%t] %c - %m%n
log4j.appender.SYSLOG.Facility=LOCAL1
Am Server:
7. Ausschalten von syslog
8. Installation von syslog-ng
9. Aufpassen, daß klogd läuft (unter Red Hat Kopie des syslog-Bootskripts,
aber nur klogd, nicht syslogd starten)
10. Konfiguration in syslog-ng.conf
options {
sync (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off);
use_dns (yes);
use_fqdn (yes);
create_dirs (no);
keep_hostname (yes);
};
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
udp(ip(0.0.0.0) port(514)); # Listen to the outside world
};
# automatic host sorting (usually used on a loghost)
#
# set it up
destination std {
file("/var/log/$FULLHOST/$R_YEAR-$R_MONTH-$R_DAY/$FACILITY.$PRIORITY"
owner(root) group(root) perm(0644) dir_perm(0755) create_dirs(yes)
);
};
# log it
log {
source(s_sys);
destination(std);
};
Ich hoffe, ich habe nichts übersehen..
Es grüßt
Peter
Mehr Informationen über die Mailingliste linux-l