Syslog-ng "Unique Persist Names"
Ich bevorzuge ein separates Logfile /var/log/mail
für Mail, damit die Logs von Postfix und Dovecot nicht in /var/log/message
untergehen. Beim Upgrade auf Version 3.13.2 von syslog-ng hatte ich plötzlich eine Fehlermeldung, die einen Start des Daemons verhinderte:
# /etc/init.d/syslog-ng start
* Checking your configfile (/etc/syslog-ng/syslog-ng.conf) ... [ ok ]
* Starting syslog-ng ...
[2018-08-09T12:43:05.358947] Error checking the uniqueness of the persist names, please override it with persist-name option. Shutting down.; persist_name='affile_dd_writers(/var/log/mail)', location='/etc/syslog-ng/mail.conf:6:9'
[2018-08-09T12:43:05.358991] Error checking the uniqueness of the persist names, please override it with persist-name option. Shutting down.; persist_name='affile_dd_writers(/var/log/mail)', location='/etc/syslog-ng/mail.conf:9:9'
[2018-08-09T12:43:05.359006] Error checking the uniqueness of the persist names, please override it with persist-name option. Shutting down.; persist_name='affile_dd_writers(/var/log/mail)', location='/etc/syslog-ng/mail.conf:13:9'
* start-stop-daemon: failed to start `/usr/sbin/syslog-ng'
* Failed to start syslog-ng [ !! ]
* ERROR: syslog-ng failed to start
Die Konfiguration für das separate Mail-Logfile wird in der Hauptkonfigurationsdatei /etc/syslog-ng/syslog-ng.conf
durch eine zusätzliche Direkte am Ende der Datei eingebunden:
@include "mail.conf"
Der relevante Ausschnitt aus /etc/syslog-ng/mail.conf
, über den syslog-ng meckerte, sah so aus:
destination mail {
file("/var/log/mail");
};
destination mailinfo {
file("/var/log/mail");
};
destination mailwarn {
file("/var/log/mail");
};
destination mailerr {
file("/var/log/mail");
};
Das Problem ist, dass alle vier Destinationen in die gleiche Datei /var/log/mail
gehen, wodurch syslog-ng offensichtlich durcheinander kommt.
Beim Suchen nach der Fehlermeldung stieß ich auf https://github.com/balabit/syslog-ng/issues/1275, wo auch gezeigt wurde, wie die in der Fehlermeldung empfohlene Option persist-name
verwendet wird. Leider passte das aber nicht zu meiner Konfiguration. Dennoch ist die Lösung simpel. Für alle Fälle poste ich hier die komplette, jetzt funktionierende Konfigurationsdatei /etc/syslog-ng/mail.conf
:
destination mail {
file("/var/log/mail" persist-name("mail"));
};
destination mailinfo {
file("/var/log/mail" persist-name("mailinfo"));
};
destination mailwarn {
file("/var/log/mail" persist-name("mailwarn"));
};
destination mailerr {
file("/var/log/mail" persist-name("mailerr"));
};
filter f_mail {
facility(mail);
};
filter f_info {
level(info);
};
filter f_warn {
level(warn);
};
filter f_err {
level(err);
};
log {
source(src);
filter(f_mail);
destination(mail);
flags(final);
};
log {
source(src);
filter(f_mail);
filter(f_info);
destination(mailinfo);
flags(final);
};
log {
source(src);
filter(f_mail);
filter(f_warn);
destination(mailwarn);
flags(final);
};
log {
source(src);
filter(f_mail);
filter(f_err);
destination(mailerr);
flags(final);
};
Nochmal: Das ist nicht die vollständige Konfiguration für syslog-ng, sondern lediglich der mail-spezifische Teil in /etc/syslog-ng/mail.conf
der mit @include "mail.conf"
in /etc/syslog-ng/syslog-ng.conf
eingebunden wird!
Leave a comment