首页 > 解决方案 > 如何定义grok过滤?

问题描述

如何为 Kibana 中显示的以下示例日志消息定义 grok 过滤模式?我已经定义了更多模式但得到_grokparsefailure

2018-12-10  14:50:01,497  [traceID : 46072cedb98568e3  spanID: 46072cedb98568e3 parent: ] service : networkService  [XNIO-2 task-1] org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:3209}] to 192.168.0.207:27017

这是我(WGSSAMINTHA)尝试的解决方案。

filter { 
  grok { 
    match => { 
      "message" => "%{IP:client} %{WORD:method} %{WORD:service} 
                    %{URIPATHPARAM:request} %{NUMBER:duration}" 
    } 
    remove_field => [ "_type:doc", 
                      "_index:archisoft-log-all", 
                      "_score: dev" ] 
  } 
} 

标签: javalogstashmicroserviceskibanaelastic-stack

解决方案


这种 grok 模式"%{IP:client} %{WORD:method} %{WORD:service} %{URIPATHPARAM:request} %{NUMBER:duration}"在解析提供的日志行时是错误的。grok 模式将被翻译成正则表达式,日志行将与之匹配;如果正则表达式与日志行不匹配,您将获得_grokparsefailure. 这意味着基本模式的顺序很重要。

由于您没有从日志行中说出您想要什么信息,因此我提取了一些看起来很重要的部分:

  grok { 
    match => { 
      "message" => "^%{TIMESTAMP_ISO8601:date}  \[traceID \: %{DATA:traceID}  spanID\: %{DATA:spanID} parent\: %{DATA:parent}\] service \: %{WORD:service}  \[%{DATA:thread}\] %{DATA:message}$"
    }
  }

这将提取这些值:

parent  
spanID      46072cedb98568e3
service     networkService
thread      XNIO-2·task-1
date        2018-12-10·14:50:01,497
message     org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:3209}] to 192.168.0.207:27017
traceID     46072cedb98568e3 

推荐阅读