[英]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.