【问题标题】:Logstash grok filter to tag received and bounced messagesLogstash grok 过滤器来标记收到和退回的消息
【发布时间】:2016-10-02 21:01:22
【问题描述】:

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

ma​​il.log 示例:

7 月 26 日 04:18:34 mx12 后缀/清理[20659]:3mfHGL1r9gzyQPmessage-id=

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.23/0.16, dsn=2.0.0, status=sent / 退回


结果 1:

我向现有电子邮件地址发送电子邮件,mail.log 中的状态为:

发送(250 ok):OKAY

但这里是 Logstash 告诉我们的:

.. 我看到每个后缀程序生成的每条消息(又是 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 个标签:bounce + send :(


预期结果:

我尝试做的是正是这个配置文件,但它是用旧版本的 Logstash 制作的(例如“grep”现在不可用),但 这正是我尝试做的事情

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

一句话:

  1. 任何带有 DSN 的条目 – RECORD: QID, dsn
  2. 任何匹配 message-id= 的条目 – 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} &"
           }
       }
     }

但是我的过滤器有问题,这让我抓狂,

有什么想法吗??

【问题讨论】:

  • 您能添加一个日志示例吗?
  • @baudsp 我在问题中添加了日志

标签: regex nginx elasticsearch logstash logstash-grok


【解决方案1】:

我找到了问题。

它来自这个测试:

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

正则表达式是/ 之间的部分,因此您的正则表达式的评估方式如下: https://regex101.com/r/eaB5jp/2

所以你所有的行都会匹配并获得标签。

为了工作,测试应该是:

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

【讨论】:

  • 问题出在正则表达式和过滤器内的规则上,但我认为您的回答非常有帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多