0

一些上下文:

我想在logstash中使用grok解析以下日志语句

07:51:45,729 TRACE [com.company.Class] (ajp-/1.2.3.4:8080-251) USERID called path: /url and took: 1000 ms

我现在使用以下语法来解析完整的消息:

%{DATA:time}\s%{DATA:level}\s%{DATA:class}\s%{DATA:thread}\s%{DATA:userid}\s.*path:\s%{DATA:url}\s.*:\s%{NUMBER:duration:int}\sms

这给了我我定义的所有属性。

我的问题:

我想将此部分解析(ajp-/1.2.3.4:8080-251)为“线程”属性和 ip 属性。结果需要是:

  • 线程:(ajp-/1.2.3.4:8080-251)
  • ip: 1.2.3.4

我怎样才能做到这一点?

谢谢

4

1 回答 1

1

只需在工作后添加第二个 grok 过滤器。不要把它放在你现有的grok 过滤器中,因为它会在第一场比赛后完成。

例子:

grok {
    match => [ 'thread', '%{IP:ip}' ]
}

这将获得您以前的字段thread => "(ajp-/1.2.3.4:8080-251)"并添加一个新字段ip => "1.2.3.4"

除此之外,我建议您更具体地使用您的模式。你DATA每次都用,这有点不精确。从这样的事情开始:

%{TIME:timestamp} %{WORD:method} \[%{JAVACLASS:class}\] \(%{DATA:thread}\) %{NUMBER:userid} %{DATA}%{URIPATH:uri}%{DATA}
于 2015-08-14T14:00:16.593 回答