从日志消息中提取子字符串(grok)

yc0p9oo0  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(429)

我是麋鹿的新成员,我有以下日志消息:

[2020-07-14 13:46:40.812],[DEBUG],[PerformanceLogger],[10.11.12.13],[http-nio-8086-exec-1],[3808B7],1,[2ddf8d01-4e5b-42cf-a6d9-ac2c0a24ccf5],[],[],[],[],[],REQUEST_END,125

我想提取号码 125 -此数字仅在其前面有以下精确字符串时出现: 'REQUEST_END,' (我想调用此字段:duration)
这就是我目前所做的。。。但它不起作用:

filter {
  grok {
    match => { 
      "message" => "^\[%{TIMESTAMP_ISO8601:alis_timestamp}\],\[%{LOGLEVEL:alis_loglevel}\s*\],\[%{DATA:alis_class}?\],\[%{IPV4:alis_clientIp}?\],\[%{DATA:alis_threadid}?\],\[%{DATA:alis_sessionid}?\],%{INT:alis_companyid}?,\[%{DATA:alis_requesttoken}?\],\[%{DATA:alis_activity}?\],\[%{DATA:alis_screen}?\],\[%{INT:alis_action}?\],\[%{INT:alis_region}?\],\[%{DATA:alis_nextscreen}?\],%{GREEDYDATA:logMessage}?" 
      "logMessage" =>["REQUEST_END, %{WORD:duration}"]
    }
  }

}

如何提取这个数字?

uwopmtnx

uwopmtnx1#

您的代码看起来非常接近解决方案。我想只是“logmessage”这行有个输入错误。替换此行:

"logMessage" =>["REQUEST_END, %{WORD:duration}"]

通过这个:

"logMessage" =>["REQUEST_END,%{INT:duration}"]

word模式不能捕获整数“string”,使用int-grok的模式,必须捕获duration字段,并且有一个空格不在这里。
您必须设置2个不同的grok filter才能解析2个步骤,以便您的日志存储配置文件中的筛选器部分:

filter{
    grok {
        match => { 
          "message" => "^\[%{TIMESTAMP_ISO8601:alis_timestamp}\],\[%{LOGLEVEL:alis_loglevel}\s*\],\[%{DATA:alis_class}?\],\[%{IPV4:alis_clientIp}?\],\[%{DATA:alis_threadid}?\],\[%{DATA:alis_sessionid}?\],%{INT:alis_companyid}?,\[%{DATA:alis_requesttoken}?\],\[%{DATA:alis_activity}?\],\[%{DATA:alis_screen}?\],\[%{INT:alis_action}?\],\[%{INT:alis_region}?\],\[%{DATA:alis_nextscreen}?\],%{GREEDYDATA:logMessage}?" 
          }
    }
    grok {
        match => {   
          "logMessage" =>["REQUEST_END,%{INT:duration}"]
        }
      }
  }

相关问题