2016-10-02 37 views
1

STHG讓我瘋了,我想分析Postfix的日誌,瞭解郵件的狀態,這裏是我試過到目前爲止:Logstash神交過濾器標籤接收和退回的郵件

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的例子:

年07月26 4點18分34秒MX12後綴/清理[20659]:3mfHGL1r9gzyQP消息-ID = < [email protected]>

7月26日四時18分34秒MX12後綴/ SMTP [20662]:3mfHGL1r9gzyQP:爲=,中繼= 127.0.0.2 [127.0.0.2]:25,延遲= 0.53,延遲= 0.13/0/0.23/0.16,DSN = 2.0.0,狀態=發送/反彈


結果1:

我在郵件發送電子郵件至現有的電子郵件地址,狀態。日誌是:

發送(250 OK):還好吧

但這裏是Logstash講述:

enter image description here

..我看到,對於每個後綴程序生成的所有信息(QMGR ,smtp,qmgr再次..)。換句話說,即使不包含「status = bounced」的所有消息。

然後我也試過:

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

在一個字:

  1. 與DSN的任何條目 - RECORD:QID,DSN
  2. 任何條目匹配消息-ID = < hashRegex> - RECORD:QID,消息ID

如下:

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

但是有一個問題在我的過濾器,這讓我瘋了,

任何想法?

+0

您可以加入你的日誌的例子嗎? – baudsp

+0

@baudsp我在問題 – Julien

回答

1

我發現了這個問題。

這是一個從這個測試來:

if [message] =~ /[ "bounced" ]/ { 
    mutate {add_tag => [ "bounce" ]} 
} 

正則表達式是/之間的部分,所以你的正則表達式求值這樣的: https://regex101.com/r/eaB5jp/2

所以所有線路將匹配,並取得標籤。

爲了工作,測試應該是:

if [message] =~ /bounced/ { 
    mutate {add_tag => [ "bounce" ]} 
} 
+0

中添加了日誌,問題出在正則表達式和過濾器內部的規則上,但我認爲你的回答非常有用,謝謝! – Julien