Wie arbeitet Postfix beim Logging


Lord_Icon

Member
Hi,

ich würde gern die mail.info Einträge in eine DB speichern lassen.
Whistler hat mir schon mal den Tipp über den Sysdaemon gegeben.

Dies ist mir aber zu kompliziert ... sprich: ich bekomme es nicht hin.
Ausserdem bleibt es hier fraglich, wie der syslogdaemon mir das in die DB schreibt. Ergo: mir zu unflexibel.

Meine jetzige Idee geruht nun auf Cron + Script der die Zeilen extrahiert und nach gewissen Regeln in die DB schreibt.

Meine Frage hier ist nun:
Wie erreiche ich das und vermeide doppelte Werte ?

Derzeitig würde ich wie folgt vorgehen:
cp mail.info mail.bak
echo > mail.info
Script ließt nun die mail.bak ein übernimmt die Daten in die DB
rm mail.bak

Mein Problem dabei:
Während des Kopierens + leeren der mail.info vergeht je nach Systemlast 1-2 Sekunden. Hier kann schon ein oder mehrere Einträge durch die Lappen gehen.

Postfix stop // Datei kopieren // Postfix start => sauberes kopieren aber blöd wenn grad eine Mail mit Anhang gesendet wird und ich lasse Postfix stoppen.

Letzte Möglichkeit, die mir Einfällt wäre die mail.info immer komplett einzulesen.
Hierzu müsste ich mir aber "merken" lassen, bis wohin das Script die Datei eingelesen hat... um später von dort aus weiter zu machen.
Allerdings werde ich hier irgendwann auf 2 Probleme stoßen:
1: Nicht gerade Systemfreundlich, da eine recht große Datei eingelesen werden muß.
2: Wenn mir syslog-ng die mail.info packt und eine neue erstellt => sind etliche Datensätze verloren (müsste dann den umständlichen Weg gehen und die gepackten *.gz Datein einlesen)



Sprich = alles nicht grad das wahre.
Hoffe darauf, das einer noch eine bessere Idee hat, die mir bis dato noch nicht in den Sinn gekommen ist.

LG
 
Du machst dir das unnötig kompliziert. Viele neuere Syslog-Daemons können in eine relationale Datenbank loggen. Da magst du das Ausgabeformat nicht - ok, ist legitim.

Aber die Syslog-Daemons, die in eine relationale Datenbank schreiben können, können die Ausgaben auch meistens an ein anderes Programm pipen. Du musst also einfach die Facility mail in dein Skript pipen lassen und kannst dann direkt die Einträge verarbeiten. So hast du keinen Stress mit doppelten Einträgen (zumindest von Seite von Postfix und des Syslog-Daemons), allerdings solltest du dir über genügend Puffer Gedanken machen (wenn die Einträge schneller kommen, als du in die Datenbank abkippen kannst).
 
Hmm, Zwischenfrage:

Wieviele Mails verarbeitet denn der Postfix in der Minute?
 
uff... ist Unterschiedlich.

Aber pro Minute kann ich das nicht festlegen. Wird sicherlich nicht hoch sein.

Warum fragst du?
Hast du eine andere Idee ?


(P.s. @Roger
bin an syslog-ng über Mysql schon dran. [was aber immernoch mit Problemen behaftet ist])
 

Back
Top