2016-10-02 35 views
1

Sthgは私が狂気になり、私はここでは、電子メールの状況を知るためにPostfixのログを解析したいメッセージをバウンス私がこれまで試したものです:Logstash GROKフィルタと

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の例:

7月26日4時18分34秒MX12接尾辞/クリーンアップ[20659]:3mfHGL1r9gzyQPメッセージID = < [email protected]>

7月26日午前4時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)を送っ:OKAY

しかし、ここではLogstashが告げるものです:

enter image description here

...と私はQMGR(各接尾プログラムによって生成されたすべてのメッセージのためにいることがわかり、smtp、qmgrもう一度..)。つまり、「ステータス=バウンス」を含まないすべてのメッセージに対してです。

は、それから私も試してみました:

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と
  1. すべてのエントリ - 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

私はこの問題を発見しました。

それは、この試験から来ています: https://regex101.com/r/eaB5jp/2

だから、すべての行が一致するとタグを取得します:正規表現は非常にあなたの正規表現は、そのように評価され、/の間の部分である

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

機能するために、テストは次のようになります。

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

問題は正規表現とフィルタ内のルールで問題になっていましたが、私はあなたの答えを非常に気難しく思っています、ありがとうございます! – Julien

関連する問題