Filtro grok do Logstash para marcar as mensagens recebidas e devolvidas

Sthg me deixa louco, eu gostaria de analisar os logs do Postfix para saber o status dos emails, eis o que eu tentei até agora:

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

Exemplo de mail.log:

26 de julho 04:18:34 postx / limpeza do mx12 [20659]:3mfHGL1r9gzyQP: id da mensagem = <[email protected]>

26 de julho 04:18:34 postx mx12 / smtp [20662]:3mfHGL1r9gzyQP: to =, relé = 127.0.0.2 [127.0.0.2]: 25, atraso = 0,53, atraso = 0,13 / 0 / 0,23 / 0,16, dsn = 2.0.0,status = enviado / saltou

Resultado 1:

Como envio um email para um endereço de email existente, o status em mail.log é:

enviado (250 ok): OK

Mas aqui está o que o Logstash diz:

.. e vejo que para cada mensagem gerada por cada programa postfix (qmgr, smtp, qmgr novamente ..). Em outras palavras, para todas as mensagens que ainda não contêm "status = devolvido".

Então eu também tentei:

   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}"}
  }

Resultado 2: Logstash adicione aqui sempre 2 tags: rejeição + envio :(

Resultado esperado:

O que eu tento fazer éexatamente esse arquivo de configuração, mas foi feito com uma versão antiga do Logstash ("grep", por exemplo, não está disponível agora), masé exatamente isso que tento fazer funcionar :

http://tales.itnobody.com/2013/07/using-logstash-to-log-smtp-bounces-like-a-boss.html

Em uma palavra :

Quaisquer entradas com um DSN - RECORD: QID, dsnQuaisquer entradas correspondentes ao ID da mensagem = <hashRegex> - RECORD: QID, ID da mensagem

Como se segue :

    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} &"
           }
       }
     }

Mas há um problema no meu filtro, que me deixa louco,

Qualquer ideia ??

questionAnswers(1)

yourAnswerToTheQuestion