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 }
}
}
7月26日04:18:34 mx12修复/清理[20659]:
:
消息id=<3mfHGL1r9gzyQP@www.mydomain.fr>
7月26日04:18:34 mx12后缀/smtp[20662]:
3mfHGL1或9gzyQP
:to=,继电器=127.0.0.2[127..0.0.2]:25,延迟=0.53,延迟=0.13/0/0.23/0.16,dsn=2.0.0,
status=已发送
/
反弹的
结果1:
我发送电子邮件到现有的电子邮件地址,状态在邮件中。日志是:
但洛格斯塔什告诉我们:
..我看到每个postfix程序生成的每条消息(qmgr、smtp、qmgr再次出现..)。换句话说,对于所有不包含“status=bounched”的消息。
然后我还尝试了:
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
总而言之:
-
带有DSN RECORD:QID,DSN的任何条目
-
与邮件id匹配的任何条目=<hashRegex(哈希正则表达式)>记录: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} &"
}
}
}
但我的过滤器有问题,这让我发疯了,
知道吗??