簡體   English   中英

Logstash grok 過濾器來標記接收和退回的消息

[英]Logstash grok filter to tag received and bounced messages

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

7 月 26 日 04:18:34 mx12 postfix/cleanup[20659]: 3mfHGL1r9gzyQPmessage-id=<3mfHGL1r9gzyQP@www.mydomain.fr>

7 月 26 日 04:18:34 mx12 postfix/smtp[20662]: 3mfHGL1r9gzyQP :to=,relay=127.0.0.2[127.0.0.2]:25,delay=0.53,delays=0.13/0/ 0.0.23 =0.13/0.1623d .0,狀態=發送/退回


結果 1:

我向現有電子郵件地址發送電子郵件,mail.log 中的狀態為:

發送 (250 ok) : OKAY

但這是 Logstash 所說的:

在此處輸入圖片說明

.. 我看到每個 postfix 程序(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 的條目 – 記錄:QID、dsn
  2. 任何匹配 message-id=<hashRegex> 的條目 – RECORD: QID, message-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} &"
           }
       }
     }

但是我的過濾器有問題,這讓我發瘋,

任何的想法 ??

我找到了問題所在。

它來自這個測試:

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

正則表達式是/之間的部分,因此您的正則表達式的評估方式如下: https : //regex101.com/r/eaB5jp/2

因此,您的所有行都將匹配並獲得標簽。

為了工作,測試應該是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM