2017-01-07 4 views
1

Ich benutze Postfix und ich muss die Mail-Protokolle analysieren, nachdem die Mails gesendet wurden. Im Moment habe ich versucht, Dinge mit Fluentd zu arbeiten, die das Tail-Plugin verwenden, um Postfix-Logs zu analysieren.Parsing von POSTFIX-Protokollen und Senden an ElasticSearch

Das Problem, mit dem ich konfrontiert bin, ist, dass ich sie nicht analysieren kann, indem Sie die Multiline-Option des Tail-Plugins verwenden. Ich kann sie einzeln mit regulären Ausdrücken analysieren, aber nicht zusammen. Dies liegt möglicherweise an der Tatsache, dass die Protokolle asynchron sind und sich jeder Prozess in der Datei anmeldet, wenn Informationen zu protokollieren sind. Ich plane zu diesem Zweck ein Ruby-Skript zu schreiben, aber das könnte eine Menge Zeit in Anspruch nehmen.

Gibt es eine bessere Lösung als das Script/Custom Plugin für Fluentd zu schreiben, da ich Ruby/Perl nicht kenne?

Logs für die ich kümmern sich nicht um Informationen zu extrahieren aus:

Jan 5 09:02:48 localhost postfix/pickup[5501]: 1733D16A90A: uid=0 from=<root> 
Jan 5 09:02:51 localhost postfix/qmgr[2596]: 1733D16A90A: removed 

Protokolle, für die ich mich interessiere Informationen zu extrahieren aus:

Jan 5 09:02:48 localhost postfix/cleanup[5978]: 1733D16A90A: message-id=<[email protected]> 
Jan 5 09:02:48 localhost postfix/qmgr[2596]: 1733D16A90A: from=<[email protected]>, size=460, nrcpt=1 (queue active) 
Jan 5 09:02:51 localhost postfix/smtp[5980]: 1733D16A90A: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.130.27]:25, delay=3.4, delays=0.05/0.01/1.9/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK 1483624971 s11si76004239pgc.259 - gsmtp) 

Das Beispiel Protokolle müssen sein an ElasticSearch als JSON-Datei gesendet, die sie dann für die weitere Verarbeitung speichert.

Antwort

1

Wenn Sie nur verfolgen müssen, wenn eine Mail gesendet wird. Sie könnten die Postfix Queue-ID
(1733D16A90A in Ihrem Protokoll) als Indexschlüssel in elasticsearch verwenden. Dann musst du jede Zeile mit grok analysieren und den Status für deinen Eintrag aktualisieren. Werfen Sie einen Blick auf dieses Beispiel für grok Muster:

https://github.com/whyscream/postfix-grok-patterns/blob/master/50-filter-postfix.conf

+0

Danke für Ihre Antwort. Obwohl, schrieb ein benutzerdefiniertes Python-Skript, das die Protokolldaten in meinen Elasticsearch-Index exportiert und die Dokumente mit QueueIDs als Schlüssel und Daten in JSON aktualisiert, sobald Daten gefunden werden. –

-1

ich eine ähnliche Frage here für das Parsen von Postfix-Logs mit Logstash beantwortet haben, und obwohl ich in eine andere Antwort Verknüpfung hassen, bleiben die Konzepte gleich und sollten Sie haben begonnen, aber nicht die Komplexität der Konfiguration als whyscream vorausgesetzt.

Die gleichen Konzepte mit grok gelten auch für Fluent.

Ihre beste Wette ist das file Eingabeplugin zum Lesen der Datei. Dies stellt sicher, dass Sie sich nicht um die mehrzeilige Verarbeitung kümmern müssen, und können sich stattdessen auf jede Zeile notwendiger Informationen konzentrieren.

input { 
    file { 
     path => "/var/log/maillog" 
     type => "postfix" # You can define a type however you like. 
    } 
} 

Schließlich sollten Sie versuchen, zu vermeiden, ein benutzerdefiniertes Skript zu schreiben, wenn möglich. Die dazu notwendigen Arbeiten wurden von den Gemeinschaften Logstash, Fluent und anderen ähnlichen Tools übernommen. Reguläre Ausdrücke für Tausende von detaillierten Protokollen zu verwalten, ist bestenfalls ein Ärgernis.