如何解决从日志消息中提取子字符串 (GROK)
我是 ELK 的新手,我收到了以下日志消息:
[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,'
(我想称这个字段为:持续时间)
这是我到目前为止所做的……但它不起作用:
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}"]
}
}
}
我如何提取这个数字?
解决方法
您的代码看起来非常接近解决方案。 我想“logMessage” grok 行上只有一个错字。 替换这一行:
"logMessage" =>["REQUEST_END,%{WORD:duration}"]
通过这个:
"logMessage" =>["REQUEST_END,%{INT:duration}"]
WORD 模式无法捕获整数“字符串”,使用 INT grok 的模式,您必须捕获 duration 字段,然后是一个不存在的空间。
并且您必须设置 2 个不同的 grok 过滤器才能解析 2 个步骤,以便您的过滤器部分包含在您的 logstash 配置文件中:
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}"]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。