我是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模式没有捕获整数";字符串";,对于INTgrok的模式,您必须捕获持续时间字段,并且有一个不在此处的空间。
你必须设置两个不同的grok过滤器才能解析两个步骤,所以你的过滤器部分在你的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}"]
}
}
}