我想将 Kibana 查询转换为 LogQL:
host:("test1-myservice-*") AND level:ERROR
AND NOT logger_name:"com.example.ExampleClass"
AND _exists_:stack_trace
AND NOT stack_trace:(
"interrupted"
OR "Read timed out"
OR "java.lang.InterruptedException"
)
我在 Grafana Explore 中尝试了以下操作,但它没有为我们的 JSON 日志消息返回任何记录:
{host=~"test1-myservice-.*"} | json
| logger_name != "com.example.ExampleClass"
| stack_trace !=""
| stack_trace =~ ".*InterruptedException.*"
使用!=
而不是=~
返回所有记录时:
{host=~"test1-myservice-.*"} | json
| logger_name != "com.example.ExampleClass"
| stack_trace !=""
| stack_trace !~ ".*InterruptedException.*"
如果我是对的,以下内容适用于文档到stack_trace
JSON 日志行的字段:
字符串类型的工作方式与日志流选择器中使用的 Prometheus 标签匹配器完全相同。这意味着您可以使用相同的操作 (=,!=,=~,!~)。
来源:标签过滤器表达式
以下似乎有效,但似乎很尴尬:
{host=~"test1-myservice-.*"} | json
| logger_name != "com.example.ExampleClass"
| stack_trace !=""
!~ ".*InterruptedException.*|.*Read timed out.*"
| json
此外,如果我是对的,它会在完整的 JSON 字符串中搜索InterruptedException
和子字符串,而不是仅在其字段中搜索。Read timed out
stack_trace
是否有更类似于 LogQL 的方式将上面的 Kibana 查询转换为 LogQL?操作员应该!~
在这种情况下工作吗?
环境:Grafana 7.5.4 / 8.2.3,Loki:2.4.1