Фильтр 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} &"
}
}
}
Но в моем фильтре есть проблема, которая сводит меня с ума,
Любая идея ??