Фильтр Grost Logstash, чтобы пометить полученные и отклоненные сообщения

Sthg сводит меня с ума, я хотел бы проанализировать журналы Postfix, чтобы узнать состояние электронных писем, вот что я пытался до сих пор:

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

Пример mail.log:

26 июля 04:18:34 mx12 постфикс / очистка [20659]:3mfHGL1r9gzyQP: сообщение-идентификатор = <[email protected]>

26 июля 04:18:34 mx12 postfix / smtp [20662]:3mfHGL1r9gzyQP: to =, реле = 127.0.0.2 [127.0.0.2]: 25, задержка = 0,53, задержки = 0,13 / 0 / 0,23 / 0,16, DSN = 2,0,0,статус = отправлено / отскочила

Результат 1:

Я отправляю письмо на существующий адрес электронной почты, статус в mail.log:

отправлено (250 нормально): хорошо

Но вот что рассказывает Logstash:

... и я вижу это для каждого сообщения, сгенерированного каждой постфиксной программой (снова qmgr, smtp, qmgr ..). Другими словами, для всех сообщений, которые даже не содержат «status = bounce».

Тогда я тоже попробовал:

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

Результат 2: Logstash добавить сюда всегда 2 тега: отказов + отправить :(

Ожидаемый результат:

То, что я пытаюсь сделать, этоименно этот файл конфигурации, но он был сделан со старой версией Logstash (например, "grep" сейчас недоступен), ноэто именно то, что я пытаюсь заставить работать :

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

Одним словом :

Любые записи с DSN - RECORD: QID, DSNЛюбые записи, соответствующие идентификатору сообщения = <hashRegex> - RECORD: QID, идентификатор сообщения

Следующим образом :

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

Но в моем фильтре есть проблема, которая сводит меня с ума,

Любая идея ??

Ответы на вопрос(1)

Ваш ответ на вопрос