Logstash Grok-Filter zum Markieren von empfangenen und zurückgewiesenen Nachrichten
Sthg macht mich verrückt, ich möchte Postfix-Protokolle analysieren, um den Status von E-Mails zu erfahren. Das habe ich bisher versucht:
input {
file {path => "/var/log/mail.log"}
}
filter {
kv {
trim => "<>"
}
if [message] =~ /[ "status=bounced" ]/ {
grok {
patterns_dir => "/etc/logstash/patterns"
match => {"message" => "%{SYSLOGBASE} (?<QID>[0-9A-F]{10}): %{GREEDYDATA:message}"}
add_tag => "bounce"
}
}
}
output {
if "bounce" in [tags] {
stdout { codec => rubydebug }
}
}
Beispiel für mail.log:
26. Juli 04:18:34 mx12 postfix / cleanup [20659]: 3mfHGL1r9gzyQP: message-id = <[email protected]>
26. Juli 04:18:34 mx12 postfix / smtp [20662]: 3mfHGL1r9gzyQP: bis =, Relais = 127.0.0.2 [127.0.0.2]: 25, Verzögerung = 0,53, Verzögerungen = 0,13 / 0 / 0,23 / 0,16, dsn = 2,0,0, status = sent / prallte
Ergebnis 1:
Ich sende eine E-Mail an eine vorhandene E-Mail-Adresse. Der Status in mail.log lautet:
gesendet (250 ok): OKAY
Aber hier ist, was Logstash sagt:
.. und ich sehe, dass für jede Nachricht von jedem Postfix-Programm (qmgr, smtp, qmgr wieder ..) generiert. Mit anderen Worten, für alle Nachrichten, die nicht einmal "status = bounce" enthalten.
Dann habe ich auch versucht:
if [message] =~ /[ "bounced" ]/ {
mutate {add_tag => [ "bounce" ]}
}
if [message] =~ /[ "message-id", "(.*)\@www\.mydomain\.fr" ]/ {
mutate { add_tag => [ "send" ] }
}
grok {
match => {"message" => "%{SYSLOGBASE} (?<QID>[0-9A-F]{10}): %{GREEDYDATA:message}"}
}
Ergebnis 2: Logstash füge hier immer 2 Tags hinzu: bounce + send:
Ergebnis erwartet:
as ich versuche zu tun, istenau diese Konfigurationsdatei, aber sie wurde mit einer alten Version von Logstash erstell ("grep" zum Beispiel ist momentan nicht verfügbar), aberdies ist genau das, was ich versuche, zum Arbeiten zu bringen :
http: //tales.itnobody.com/2013/07/using-logstash-to-log-smtp-bounces-like-a-boss.htm
In einem Wort
Alle Einträge mit einem DSN - RECORD: QID, dsnAlle Einträge, die mit message-id = <hashRegex> übereinstimmen - RECORD: QID, message-idWie folgt
output{
if "bounce" in [tags] {
exec {
command => "php -f /path/LogDSN.php %{QID} %{dsn} &"
}
}
if "send" in [tags] {
exec {
command => "php -f /path/LogOutbound.php %{QID} %{message-id} &"
}
}
}
Aber es gibt ein Problem in meinem Filter, das mich verrückt macht,
Irgendeine Idee ?