[Postfixbuch-users] OT: Meinungsumfrage "Aushändigen von Logfiles"

Thomas Gelf thomas at gelf.net
Fr Jun 5 10:57:30 CEST 2009


Thomas Schwenski schrieb:
> Hier auf der Liste hatte mal jemand ein interessante Projket für seine
> Serverfarm vorgestellt: Er ließ alle Maillogs auf einem zentralen
> Syslog-Server zusammenlaufen und dort in eine MySQL-Datenbank speichern.

Hmmm... das könnte ich gewesen sein ;-)

> Derartiges steht bei mir auch auf dem Plan:
> 
> Logfiles der letzten Tage in die Datenbank speichern
> (möglichst atomar und mit Relationen zwischen Domains, E-Mail-Adressen
> und Einträgen).

Das mit den Relationen solltest du dir nochmals gut überlegen. Bei
geringem Mail-Traffic kein Problem und machbar. Aber gemäß dem Motto
"Normalization Is for Sissies": kaum wird's ein wenig heftiger, kannst
du das vergessen - da hilft auch der teuerste Server wenig. Flache
Tabellen, redundante Daten, horizontale Partitionierung (auf DB- oder
Applikationsebene) sind da ein heißer Tipp.

Ich emfehle dir für die Log-Einträge flache Tabellen, nimm eine Spalte
für die (vollständige!) E-Mail Adresse und eine für die Domain - du
solltest auf keinen Fall auf die Idee kommen, hier CONCAT() oder
Ähnliches in deine WHERE's oder JOIN's einbauen zu müssen. Und rechne
schon mal aus, wann dir deine IDs (INT sind bloß 4 Byte) ausgehen
werden).

Solltest du MySQL nutzen: MyISAM reicht, zudem ist es besser die
Such-Abfragen auf einem Slave durchzuführen (auch wenn du nur einen
Server hast, lass zwei MySQL-Instanzen laufen) - du kannst es dir
nicht leisten, mit jedem SELECT (kann schon mal 2-3 Sekunden dauern)
alle INSERTs warten zu lassen. So was kann böse enden, wenn ein Kunde
mal ungeduldig in deinem Web-Interface herumklickt.

Wir haben hier aktuell wieder Spitzen von 6 Millionen Zustellversuchen
pro Tag, was ich noch für relativ gemütlich halte - wir sind nur ein
kleiner lokaler ISP. Dennoch wächst meine Log-Datenbank um 2 GB und
mehr pro Tag, Amavis-eigene DB und Quarantäne noch gar nicht mit-
gerechnet.

Und was noch schlimmer ist: das sind zu Spitzenzeiten locker 100 neue
Datenbank-Einträge pro Sekunde und mehr, welche jeweils aus mehreren
Syslog-Zeilen (von zwei Postfix-Instanzen und Amavis) korreliert
werden müssen.

Zudem können es bei einem Client mit langsamer Anbindung schon mal
mehrere bis viele Minuten zwischen erster und letzter Log-Zeile
vergehen. Das heißt du darfst dir alte Zeilen "merken" während in
der Zwischenzeit 10.000e andere Zeilen durchgeschossen werden.

Und vor noch einem bösen Effekt möchte ich dich warnen: du kannst
dich nicht darauf verlassen, dass die Reihenfolge der Log-Einträge
mit der Reihenfolge der Operationen übereinstimmt. So kann schon
mal laut Log ein Mail in der Queue angekommen sein, bevor du den
entsprechenden "connect"-Eintrag erhältst (da mehrere Prozesse und
CPU-Cores...).

> Dort kann sich dann jeder Kunde über ein eigenes Webinterface in
> Echtzeit selbst über die ihm zugeordneten E-Mail-Adressen/Domains
> informieren.

Das war die Idee hinter dem Ganzen ;-) Erst mal gab's das für
VIP-Kunden auf Domain-Ebene in einem speziellen Backoffice, mittler-
weile für alle Postfächer auch im Webmail - live!

> Das ist denke ich machbar und wird mein nächstes größeres
> Programmierprojekt.

Lass dich nicht davon abhalten, ist auf jeden Fall ein Projekt das
Spaß macht! Aber sei gewarnt: nimm's pragmatisch - oder reserviere
dir ordentlich viel Zeit und Kaffee ;-)

Wie ich das Ganze hier bei uns umgesetzt und aufgebaut habe (mit
besonderem Augenmerk auf die ganze Log-Geschichte) stelle ich
übrigens am 02.07. auf Peer's Mailserver-Konferenz in Berlin vor:

http://www.heinlein-support.de/mk/mk09-der-oss-mailcluster-von-raiffeisen-online/

Vielleicht hat ja der ein oder andere Lust und Zeit, sich das anzu-
hören - werde mich bemühen nicht allzu viel Unsinn zu erzählen ;-)

Mit liebem Gruß
Thomas Gelf





Mehr Informationen über die Mailingliste Postfixbuch-users