带有logstash和postfix的Grok模式问题

带有logstash和postfix的Grok模式问题,logstash,postfix-mta,grok,subject,Logstash,Postfix Mta,Grok,Subject,我在为我的elasticsearch服务器解析某行数据时遇到了问题,以使其可搜索,等等 我在这里试图做的是让postfix日志成为通过系统的所有消息的主题行。我知道这对于数据记录来说是一个灰色地带,但它似乎是有效的 为了实现这一点,我编辑了postfix文件中的main.cf,对主题行执行headercheck,并在信息级别进行记录,然后将其写入邮件日志 因此,消息的主题行来自postfix清理过程,在kibana中是这样的,一旦解析出来: Table JSON @timestamp

我在为我的elasticsearch服务器解析某行数据时遇到了问题,以使其可搜索,等等

我在这里试图做的是让postfix日志成为通过系统的所有消息的主题行。我知道这对于数据记录来说是一个灰色地带,但它似乎是有效的

为了实现这一点,我编辑了postfix文件中的main.cf,对主题行执行headercheck,并在信息级别进行记录,然后将其写入邮件日志

因此,消息的主题行来自postfix清理过程,在kibana中是这样的,一旦解析出来:

Table
JSON
@timestamp      January 8th 2016, 11:51:10.951
t@version       1
t_id            AVIiJeGaAHt2sxJKgJgY
t_index         logstash-2016.01.08
#_score         [empty]
t_type          log
#count          1
tfields.type        postfix
tfrom           [Incoming server]
thelo           [Test computer]
tinput_type     [empty]
#line           715
tmessage        Jan  8 11:51:10 testserver postfix/cleanup[19150]: CFEBE81B5877: info: header Subject: Test Messages from unknown[10.21.2.166]; from=<Test@testserver.com> to=<example@example.com> proto=ESMTP helo=<testcomputer>
#offset         226,216
tproto          ESMTP
tshipper        Testserver
tsource         /var/log/maillog
ttags           _grokparsefailure
tto             example@example.com
ttype           log

您的模式必须与您的输入相匹配,如前面的注释所述。如果查看输入,它在SYSLOGBASE之后有几个部分。(为便于讨论,增加了行号):

1。CFEBE81B5877:
2.信息:
3.标题主题:来自未知[10.21.2.166]的测试消息;
4.从=
5.到=
6.proto=ESMTP
7.希洛=
因此,您的模式必须考虑所有(或在某些情况下,一些)这些数据

即使是你的新模式也不能做到这一点(再次用数字来划分对话价值):

1.%{QUEUEID:qid}:
2%{DATA:type_alert}:
3%{GREEDYDATA:subject}来自%{RELAY};
到=
%{数据:proto)
输入的行号1-3与模式的1-3相匹配,您可以在grok调试器中进行测试

但是看一下输入的第4行。在模式中没有任何匹配的内容。因此,整个模式不匹配,并且没有字段


grok的通用建议是使用调试器,开始放慢速度,一次从左侧移动一个字段。这将防止您丢失字段,并确保您在移动过程中对解析感到满意。

如前面的注释所述,您的模式必须与您的输入相匹配。如果查看您的输入,它会有多个字段SYSLOGBASE之后的部分。(为了讨论而添加行号):

1.CFEBE81B5877:
2.资料:
3.标题主题:来自未知的测试消息[10.21.2.166];
4.从=
5.至=
6.proto=ESMTP
7.直升机=
因此,您的模式必须考虑所有(或在某些情况下,一些)这些数据

即使是你的新模式也不能做到这一点(再次用数字来划分对话价值):

1.%{QUEUEID:qid}:
2.%{DATA:type_alert}:
3.%{RELAY}中的%{GREEDYDATA:subject};
到=
%{数据:proto)
输入的行号1-3与模式的1-3相匹配,您可以在grok调试器中进行测试

但是看一下输入的第4行。在模式中没有任何匹配的内容。因此,整个模式不匹配,并且没有字段


grok的通用建议是使用调试器,开始减慢速度,从左侧一次移动一个字段。这将防止丢失字段,并确保您在移动过程中对解析感到满意。

我们需要查看您的grok{}筛选节。只是在底部添加了它。您希望哪个模式与主题匹配?我看到的唯一一个生成“主题”字段的模式是POSTFIXCLEANUP,但您的输入行不包含该模式所需的所有字段。不相关,但请想象一下运行多达16个regexp匹配以查看该行是否以SYSLOGBAS开头的成本E.考虑用一个GROK { }节来拉开它,然后检查后缀的剩余部分。看,我需要做的就是完成GRK线来匹配它,理论上它应该正确解析。再一次,我道歉,我对GROK过滤器没有太多的经验。我们需要看到你的GROK { }。筛选节。只是在底部添加了它。您希望哪个模式与主题匹配?我看到的唯一一个生成“主题”字段的模式是POSTFIXCLEANUP,但您的输入行不包含该模式所需的所有字段。不相关,但请想象一下运行多达16个regexp匹配以查看该行是否以SYSLOGBAS开头的成本考虑有一个凹槽{}第节完成,然后检查其余部分的后缀内容。看到了吗,我需要做的就是完成grok行以匹配它,理论上它应该正确解析?再次道歉,我对grok筛选器没有太多经验。谢谢,这回答了我的问题!谢谢,这回答了我的问题!
# Postfix stuff based on https://gist.github.com/jbrownsc/4694374:
# ORIGINAL POSTFIX PATTERNS #
QUEUEID (?:[A-F0-9]+|NOQUEUE)
EMAILADDRESSPART [a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILADDRESSPART:local}@%{EMAILADDRESSPART:remote}
RELAY (?:%{HOSTNAME:relayhost}(?:\[%{IP:relayip}\](?::[0-9]+(.[0-9]+)?)?)?)
POSREAL [0-9]+(.[0-9]+)?
DELAYS (%{POSREAL}[/]*)+
DSN %{NONNEGINT}.%{NONNEGINT}.%{NONNEGINT}
STATUS sent|deferred|bounced|expired
PERMERROR 5[0-9]{2}
MESSAGELEVEL reject|warning|error|fatal|panic
POSTFIXACTION discard|dunno|filter|hold|ignore|info|prepend|redirect|replace|reject|warn

# postfix/smtp and postfix/lmtp and postfix/local
POSTFIXSMTPRELAY %{QUEUEID:qid}: to=<%{EMAILADDRESS:to}>,(?:\sorig_to=<%{EMAILADDRESS:orig_to}>,)? relay=%{RELAY}, delay=%{POSREAL:delay}, delays=%{DELAYS:delays}, dsn$
POSTFIXSMTPCONNECT connect to %{RELAY}: %{GREEDYDATA:reason}
POSTFIXSMTP4XX %{QUEUEID:qid}: host %{RELAY} said: %{GREEDYDATA:reason}
POSTFIXSMTP5XX %{QUEUEID:qid}: to=<%{EMAILADDRESS:to}>,(?:\sorig_to=<%{EMAILADDRESS:orig_to}>,)? relay=%{RELAY}, delay=%{POSREAL:delay}, delays=%{DELAYS:delays}, dsn=%$
POSTFIXSMTPREFUSAL %{QUEUEID:qid}: host %{RELAY} refused to talk to me: %{GREEDYDATA:reason}
POSTFIXSMTPLOSTCONNECTION %{QUEUEID:qid}: lost connection with %{RELAY} while %{GREEDYDATA:reason}
POSTFIXSMTPTIMEOUT %{QUEUEID:qid}: conversation with %{RELAY} timed out while %{GREEDYDATA:reason}

# postfix/smtpd
POSTFIXSMTPDCONNECTS (?:dis)?connect from %{RELAY}
POSTFIXSMTPDACTIONS %{QUEUEID:qid}: %{POSTFIXACTION}: %{DATA:command} from %{RELAY}: %{DATA:smtp_response}: %{DATA:reason}; from=<%{EMAILADDRESS:from}> to=<%{EMAILADDR$
POSTFIXSMTPDTIMEOUTS timeout after %{DATA:command} from %{RELAY}
POSTFIXSMTPDLOGIN %{QUEUEID:qid}: client=%{DATA:client}, sasl_method=%{DATA:saslmethod}, sasl_username=%{EMAILADDRESS:saslusername}
POSTFIXSMTPDCLIENT %{QUEUEID:qid}: client=%{DATA:client}

# postfix/cleanup
POSTFIXCLEANUP %{QUEUEID:qid}: %{DATA:type_alert}: %{GREEDYDATA:subject} from %{RELAY}; message-id=<%{EMAILADDRESS:messageid}>

# postfix/bounce
POSTFIXBOUNCE %{QUEUEID:qid}: sender non-delivery notification: %{QUEUEID:bouncequeueid}

# postfix/qmgr and postfix/pickup
POSTFIXQMGR %{QUEUEID:qid}: (?:removed|from=<(?:%{EMAILADDRESS:from})?>(?:, size=%{POSINT:size}, nrcpt=%{POSINT:nrcpt} \(%{GREEDYDATA:queuestatus}\))?)

# postfix/warm
POSTFIXINFO %{QUEUEID:qid}
input {
    file {
        type => "postfix"
        path => "/var/log/maillog"
    }
}

    filter {
        grok {
            patterns_dir => [ "/etc/logstash/patterns.d" ]
            pattern => [
                "%{SYSLOGBASE} %{POSTFIXSMTPDCONNECTS}",
                "%{SYSLOGBASE} %{POSTFIXSMTPDACTIONS}",
                "%{SYSLOGBASE} %{POSTFIXSMTPDTIMEOUTS}",
                "%{SYSLOGBASE} %{POSTFIXSMTPDLOGIN}",
                "%{SYSLOGBASE} %{POSTFIXSMTPDCLIENT}",
                "%{SYSLOGBASE} %{POSTFIXSMTPRELAY}",
                "%{SYSLOGBASE} %{POSTFIXSMTPCONNECT}",
                "%{SYSLOGBASE} %{POSTFIXSMTP4XX}",
                "%{SYSLOGBASE} %{POSTFIXSMTP5XX}",
                "%{SYSLOGBASE} %{POSTFIXSMTPREFUSAL}",
                "%{SYSLOGBASE} %{POSTFIXSMTPLOSTCONNECTION}",
                "%{SYSLOGBASE} %{POSTFIXSMTPTIMEOUT}",
                "%{SYSLOGBASE} %{POSTFIXBOUNCE}",
                "%{SYSLOGBASE} %{POSTFIXQMGR}",
                "%{SYSLOGBASE} %{POSTFIXCLEANUP}",
                "%{SYSLOGBASE} %{POSTFIXINFO}"
            ]
            named_captures_only => true
        }
    }
1. CFEBE81B5877:
2. info:
3. header Subject: Test Messages from unknown[10.21.2.166];
4. from=<Test@testserver.com>
5. to=<example@example.com>
6. proto=ESMTP
7. helo=<testcomputer>
1. %{QUEUEID:qid}:
2. %{DATA:type_alert}:
3. %{GREEDYDATA:subject} from %{RELAY};
to=<%{EMAILADDRESS:to}>
%{DATA:proto)
<%{IPORHOST}>