我正在尝试解析Postfix日志中的@message
字段并将其解压缩到多个字段中。
消息:
<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<test@gmail.com>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)
LogStash输出:
{
"@source": "syslog://192.244.100.42/",
"@tags": [
"_grokparsefailure"
],
"@fields": {
"priority": 13,
"severity": 5,
"facility": 1,
"facility_label": "user-level",
"severity_label": "Notice"
},
"@timestamp": "2013-09-17T17:12:06.958Z",
"@source_host": "192.244.100.42",
"@source_path": "/",
"@message": "<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<test@gmail.com>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)",
"@type": "syslog"
}
我尝试使用grok解析器,但数据仍保留在@message
字段中。我想将syslog解析器与正则表达式一起使用。
我要采取哪些步骤来解析@message
字段?
答案 0 :(得分:0)
您的输出中有_grokparsefailure这一事实表明解析日志时出现问题。你在配置中使用的grok过滤器是什么?
答案 1 :(得分:0)
虽然我们现在处于Logstash 5.x,但grok的概念保持不变。
不幸的是,Postfix在日志记录中有一些非常烦人的模式,因为少数人已经编写了一些patterns来解释你在Postfix日志中最终会看到的大部分数据。我只会使用其中的一些。
关键是要识别消息的组成部分,如果它们符合标准或者很受欢迎,那么很可能已经为它编写了一个grok过滤器(例如syslog)。你不知道的消息的组成部分,你可以用grok写一个过滤器。
让我们把信息分成几部分:
<22>Sep 17 19:12:14 postfix/smtp[18852]:
:这几乎是RFC5424系统日志,但缺少 ver(版本)字段。
28D40A036B: to=<test@gmail.com>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)
:这是Postfix的特定于域的信息。
过滤强>
filter {
if [type] == "postfix" {
grok {
patterns_dir => "/etc/logstash/patterns"
match => { "message" => "%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP} %{SYSLOGPROG}: %{POSTFIX_SMTP_DELIVERY}" }
}
}
}
您可以在patterns_dir中保存Postfix模式。
<强>输出:强>
{
"postfix_queueid" => "28D40A036B",
"@timestamp" => 2017-02-23T08:15:32.546Z,
"postfix_smtp_response" => "250 2.0.0 Ok: queued as 9030A15D0",
"port" => 50228,
"postfix_keyvalue_data" => "to=<test@gmail.com>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent",
"syslog5424_pri" => "22",
"@version" => "1",
"host" => "10.0.2.2",
"pid" => "18852",
"program" => "postfix/smtp",
"message" => "<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<test@gmail.com>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)"
}
所有上述grok过滤器都是common或由其他人编写以达到目的。幸运的是,许多人使用Postfix,但很少有人为它编写过滤器,因为它相当复杂。
一旦建立,您可以使用Logstash配置获得漂亮的crafty。