用于Quarkus中Opentracing的Logstash Grok过滤器';日志
正在将Quarkus日志文件导入elasticsearch。我的问题是试图处理logstash中的日志。。。如何使用grok筛选器获取traceId和spanId 下面是一个示例日志条目:用于Quarkus中Opentracing的Logstash Grok过滤器';日志,logstash,logstash-grok,quarkus,Logstash,Logstash Grok,Quarkus,正在将Quarkus日志文件导入elasticsearch。我的问题是试图处理logstash中的日志。。。如何使用grok筛选器获取traceId和spanId 下面是一个示例日志条目: 21:11:32 INFO traceId=50a4f8740c30b9ca, spanId=50a4f8740c30b9ca, sampled=true [or.se.po.re.EmployeeResource] (vert.x-eventloop-thread-1) getEmployee with
21:11:32 INFO traceId=50a4f8740c30b9ca, spanId=50a4f8740c30b9ca, sampled=true [or.se.po.re.EmployeeResource] (vert.x-eventloop-thread-1) getEmployee with [id:2]
这是我的建议:
%{TIME} %{LOGLEVEL} %{WORD:traceId} %{WORD:spanId} %{GREEDYDATA:msg}
使用grok调试器,似乎没有检测到traceId和spanId。问题可能有两个方面:
- 字段之间的间距可能已关闭(请尝试在
之后添加%{LOGLEVEL}
或\s?
)\t
- 由于包含
=
AFIK Grok表达式需要与原始文本完全相同。因此,尝试添加逗号、空格和事件,以显示所有您不想捕获的文本。例如
traceId=
%{TIME} %{LOGLEVEL} traceId=%{WORD:traceId}, spanId=%{WORD:spanId}, %{GREEDYDATA:msg}
这是日志行和我的grok表达式建议的输出
{
"TIME": [
[
"21:11:32"
]
],
"HOUR": [
[
"21"
]
],
"MINUTE": [
[
"11"
]
],
"SECOND": [
[
"32"
]
],
"LOGLEVEL": [
[
"INFO"
]
],
"traceId": [
[
"50a4f8740c30b9ca"
]
],
"spanId": [
[
"50a4f8740c30b9ca"
]
],
"msg": [
[
"sampled=true [or.se.po.re.EmployeeResource] (vert.x-eventloop-thread-1) getEmployee with [id:2]"
]
]
}
正如其他用户所提到的,注意单词之间的空格很重要。例如,logLevel和traceId之间有两个空格。您可以使用s+
正则表达式来忘记它们。但是,可能过多地使用它会对性能产生很大(而且很糟糕)的影响
%{TIME}\s+%{LOGLEVEL}\s+traceId=%{WORD:traceId},\s+spanId=%{WORD:spanId},\s+%{GREEDYDATA:msg}
%{TIME}\s+%{LOGLEVEL}\s+traceId=%{WORD:traceId},\s+spanId=%{WORD:spanId},\s+%{GREEDYDATA:msg}