【发布时间】:2022-01-15 06:23:28
【问题描述】:
我想将 Kibana 查询(like to follow)翻译成 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.*"
如果我是对的,以下内容适用于文档中的 JSON 日志行的 stack_trace 字段:
字符串类型的工作方式与日志流选择器中使用的 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
【问题讨论】:
标签: json grafana grafana-loki logql