繁体   English   中英

在 LogQL 中添加 2 个字段以在聚合函数中使用

[英]Add 2 fields in LogQL to use within aggregate function

我有包含一些时间戳字段的日志行。 这是我正在过滤以处理它的日志行的示例:

    
{
  "time": "2022-06-22T10:33:08.710037238Z",
  "@version": "1",
  "message": "Duration at response processing ends",
  "logger_name": "com.mks.cloud.filters.MainFilter",
  "thread_name": "reactor-http-epoll-1",
  "level": "INFO",
  "level_value": 20000,
  "rqst_id_ts": "b65c37d9284584e71b1dcd84b6a74075",
  "rqst_end_ts": "1655893988698",
  "rqst_start_ts": "1655893988698",
  "rsp_start_ts": "1655893988709",
  "rsp_end_ts": "1655893988709"
}

我想做的是计算一个值,该值表示日志行中两个时间戳之间的持续时间,以便我可以将获得的范围放入 quantile_over_time() 或任何其他聚合函数中。

例如,以下工作:

quantile_over_time(0.99, {app="myapp"} |~ "rsp_end_ts"
      | json
      | __error__ = ""
      | unwrap rsp_end_ts | __error__="" [5m]) by (tsNs)

然而,这不是我想要做的,因为计算纪元时间戳的分位数没有意义。 我要计算的是 (rsp_end_ts - rqst_start_ts) 的 p99。

我尝试了以下当然不起作用的方法,但给出了我正在尝试做的事情的想法:

quantile_over_time(0.99, {app="myapp"} |~ "rsp_end_ts"
      | json
      | __error__ = ""
      | unwrap (rsp_end_ts - rqst_start_ts) | __error__="" [5m]) by (tsNs)

如果有办法创建一个新标签,如 rqst_duration=(rsp_end_ts - rqst_start_ts)

那么以下将是我正在寻找的:

quantile_over_time(0.99, {app="myapp"} |~ "rsp_end_ts"
      | json
      | __error__ = ""
      | unwrap rqst_duration | __error__="" [5m]) by (tsNs)

我找不到任何关于此的文档,这非常令人惊讶,我认为(但似乎我可能错了)这是一个常见的用例。 任何帮助将不胜感激 :)。

您可以为此使用 模板函数 这是Grafana 操场上的示例查询,您可以从中获得启发。

因此,您的查询将类似于:

{app="myapp"} |~ "rsp_end_ts"
      | json
      } label_format result=`{{sub .rsp_end_ts rqst_start_ts}}` | line_format "{{ .result }}" 

然后你可以使用结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM