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

Wie 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 ?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage