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

Thomas Schwenski mailing-lists at thomasschwenski.de
Sa Jun 6 12:24:10 CEST 2009


Hallo Thomas

Thomas Gelf schrieb:
> Hmmm... das könnte ich gewesen sein ;-)
...


> 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).

Die Variante der flachen Tabellen ist die eine Möglichkeit.
Ich vermute aber mal, dass Du meinst, dass wenn ich anstelle der
redundanten Speicherung von E-Mail-Adresse und Domain dort nur einen
Fremdschlüssel einer anderen Tabelle reinschreibe, die JOINs zwischen
den Tabellen zu aufwändig wären?

> 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.

Guter Einwand.

> 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.

Nun - in diesen Größenordnungen denke ich gar nicht.
(Bzw. brauche ich noch nicht denken.)
Außerdem werde ich die in der Datenbank gespeicherten Logs auch nicht
ewig aufheben sondern nur so lange wie eine live-Rückverfolgung
überhaupt sinnvoll ist.
Darüber hinaus logge ich zusätzlich weiterin in Dateien.

> 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.

Jetzt muss ich mal nachfragen:
Du loggst also nicht original in die Datenbank sondern Deine
Schnittstelle zwischen Syslog/Pipe und der Datenbank wertet die Logfiles
erst aus?

Sprich: nur 1 Datensatz je Mail?
Oder willst Du nur eine ID bei allen Datnsätzen zu einer Mail haben.

Ich dachte schon an ein Logging der Original-Zeilen in der DB.


> 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...).

Dazu gibt es in dem Log-Pipe-Eintrag doch einen Timestamp, oder?
Den wollte ich verwerten für die Zeitangabe in der Datenbank.

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

Deshalb ja.

> 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 ;-)

Ich hoffe davon gibt's einen Stream/Video-Download, denn die Teilnahme
ist bei mir leider ausgeschlossen.
Interessiert bin ich an dem Projekt auf jeden Fall, aber das merkt man
ja sicherlich.

Was mich aber vor allem interessieren würde, wie hast Du das Auslesen
der Pipe gemanagt?
Lässt Du die nur per Schleife auslesen, auswerten, INSERTen?
Oder übergibst Du die Informationen an einen eigenen Thread, der sich um
Auswertung und Datenbank-Eintrag kümmert um schnell wieder die Pipe
auslesen zu können?
Gerade die letzte Variante scheint mir bei eurem Mailaufkommen sinnvoll.

Thomas

> Mit liebem Gruß
> Thomas Gelf
> 
> 
> --
> _______________________________________________
> Postfixbuch-users -- http://www.postfixbuch.de
> Heinlein Professional Linux Support GmbH
> 
> Postfixbuch-users at listen.jpberlin.de
> https://listi.jpberlin.de/mailman/listinfo/postfixbuch-users




Mehr Informationen über die Mailingliste Postfixbuch-users