0

我开始使用 logstash 来管理 syslog。为了测试它,我从远程机器发送简单的消息并尝试用logstash解析它们。

唯一的 Logstash 配置,通过命令行使用:

input {
        syslog {
                type => syslog
                port => 5514
        }
}

filter {
        grok {
                match =>  { "message" => "hello %{WORD:who}" }
                }
      }

output {
        stdout { }
        elasticsearch {
                host => "elk.example.com"
                cluster => "security"
                protocol => "http"
        }
}

我确实收到了日志并且它们被正确解析(who生成了一个字段)。同时,tags包含_grokparsefailure.

我发送的测试日志是hello rambo3. 我认为它是

2015-01-29T09:27:48.344+0000 10.242.136.232 <13>1 2015-01-29T10:27:48.113612+01:00 AA1.example.com testlog.txt - - - hello rambo3

grok 调试器也同意:

在此处输入图像描述

为什么要_grokparsefailure添加到标签中?

有趣的是,通过 pure 发送的相同数据tcp被相同的过滤器正确解析(_grokparsefailure不在标签中)

4

1 回答 1

2

_grokparsefailure不是由您自己的过滤器添加的grok。使用syslog输入时,syslog 格式必须遵循RFC3164,如此所述。

一般Syslog输入会解析日志并添加对应的fieldlike log severity。因此,其中有一个 grok 动作。但是,您从远程服务器发送的日志是RFC 5424格式的。因此,logstash 无法解析日志然后添加_grokparsefailure标签。

于 2015-01-30T02:26:09.887 回答