Syslog-ng "Unique Persist Names"

de 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!


blog comments powered by Disqus