【发布时间】: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 }
}
}
mail.log 示例:
7 月 26 日 04:18:34 mx12 后缀/清理[20659]:3mfHGL1r9gzyQP:message-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
一句话:
- 任何带有 DSN 的条目 – RECORD: QID, dsn
- 任何匹配 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