rsyslog: Ereignisse nur in eine Datei schreiben?

Bachsau

Member
Hallo,

habe bei mir folgende Situation:
Es gibt separate logdateien für cron und pure-ftpd. Trotzdem tauchen diese Meldungen noch zusätzlich in /var/log/syslog auf, sind also doppelt.

Wie krieg ich es hin, dass Einträge, die schon in eine andere Datei geschrieben wurden nicht auch noch in syslog geschrieben werden?

Hier meine rsyslog.conf
Code:
# /etc/rsyslog.conf von Bachsau

# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html

# Minus (-) vor Dateien bewirkt, dass keine sofortige
# Synchronisierung mit dem Dateisystem erzwungen wird.


#################
#### MODULES ####
#################

$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#
# Set the default permissions for all log files.
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf


###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
cron.*				-/var/log/cron.log
daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
user.*				-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info			-/var/log/mail.info
#mail.warn			-/var/log/mail.warn
#mail.err			/var/log/mail.err

#
# Logging for INN news system.
#
#news.crit			/var/log/news/news.crit
#news.err			/var/log/news/news.err
#news.notice			-/var/log/news/news.notice

# pure-ftpd
:programname, isequal, "pure-ftpd"	-/var/log/pure-ftpd/ftp.log

#
# Some "catch-all" log files.
#
*.=debug;\
	auth,authpriv.none;\
	news.none;mail.none	-/var/log/debug
*.=info;*.=notice;*.=warn;\
	auth,authpriv.none;\
	cron,daemon.none;\
	mail,news.none		-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg				*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#	news.=crit;news.=err;news.=notice;\
#	*.=debug;*.=info;\
#	*.=notice;*.=warn	/dev/tty8

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
# 
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
#daemon.*;mail.*;\
#	news.err;\
#	*.=debug;*.=info;\
#	*.=notice;*.=warn	|/dev/xconsole
 
Du musst eine Zeile mit folgendem Inhalt unter die letzte Zeile der entsprechenden Regeln setzen:
Code:
& ~

Dadurch wird es in der Filterregel discarded und nicht mehr an syslog geschickt sofern diese nicht vorher spezifiert wurde
kern.* ~ hingegen wirft alle Inhalte die matchen an diesem Punkt raus ohne eine entsprechende Regel vorher. (& ~ ist aber leistungsfaehiger wenn du bereits eine Regel hast)
 
Okay, so wie ich dich verstanden habe, bedeutet das, ich muss alles, was ich raushaben will vor die *.*-Zeile ziehen, und mit "& ~" fliegt dann alles, was bis zu dieser Zeile schon eingeordnet ist, raus?

Ich habe gerade hier gelesen, und daraus geht hervor, dass "&" nur den Selektor wiederholt, was bedeuten würde, dass jede Zeile die verworfen werden soll, ein eigenes "& ~" unter sich braucht.

* ~ hingegen wirft alle Inhalte die matchen an diesem Punkt raus ohne eine entsprechende Regel vorher.
Welche Inhalte matchen denn? :confused:
Passt ein "*" nicht auf alles, so dass "* ~" genau wie "*.*" jegliche Meldungen verwerfen würde? Die Dokumentation geht auf einen solchen Fall nicht ein. Nur auf Fälle, in denen nach oder vor dem "*" ein "." steht. :(

PS: Gibt es denn irgendeinen sinnvollen Grund, warum alle Meldungen nochmal in /var/log/syslog auftauchen sollten? Ich finde das irgendwie sinnlos, wenn alles doppelt ist. Besonders Cron spammt mir die ganze Datei zu.
 
Last edited by a moderator:
Ich habe gerade hier gelesen, und daraus geht hervor, dass "&" nur den Selektor wiederholt,
Genau. Tut mir leid wenn ich mich nicht klar ausgedrueckt hatte.

Passt ein "*" nicht auf alles, so dass "* ~" genau wie "*.*" jegliche Meldungen verwerfen würde? Die Dokumentation geht auf einen solchen Fall nicht ein.
Es wuerde alles matchen, ja. Auch hier war mein Ausdrucksweise aufgrund der Muedigkeit in den letzten Tagen vermutlich subideal, "*" sollte als Platzhalter fuer einen x-beliebigen Filter stehen.

Gibt es denn irgendeinen sinnvollen Grund, warum alle Meldungen nochmal in /var/log/syslog auftauchen sollten?
Relationen zwischen Ereignissen verschiedener Dienste. Aber die kann man sich auch "im Kopf" aufstellen oder durch Tools analysieren lassen lassen...
 
Ist doch okay, hast mir sehr geholfen. Vorher habe ich die Dokumentation nicht so richtig verstanden, weil ich den grundsätzlichen Aufbau der Datei noch nicht durchschaut hatte.

Dadurch, dass der zweite Parameter in der Regel ein Dateiname ist, habe ich es für eine Art Pipe gehalten. Aber es ist ja so, dass der erste Parameter ein beliebig weit gefasster Filter ist, und der zweite eine Aktion, also mehr ein Try-Catch-System.
 
Last edited by a moderator:
Der 2. Parameter kann ~ (/dev/null), eine Pipe, ein Unix-Socket, eine TCP-Adresse, eine UDP-Adresse oder eine regulaere Datei sein.
 
Back
Top