You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LogQL中提取含逗号的数值并转为数字类型?

解决Loki中提取带逗号的EF日志耗时并转为数字类型的问题

问题场景

.NET Entity Framework输出的日志中,当数据库查询耗时≥1000毫秒时,数值会包含逗号分隔符,示例日志如下:

2024-08-11T04:10:49.92983505Z stdout F Executed DbCommand
(3,768ms) [Parameters=[@__param_0='?' (DbType = Object), @__param_2='?' (DbType = Object), @__param_3='?' (DbType = Object),
@__param_4='?' (DbType = Object)], CommandType='Text',
CommandTimeout='30']

使用以下正则提取耗时后,尝试用query_ms > 30s筛选时,带逗号的日志行会出现标签格式错误:

{container="my-container"} |= `Executed DbCommand` | regexp `\((?P<query_ms>[0-9]+\,?[0-9]*ms)\)`

即使尝试捕获不含ms的数值,筛选大于30000的结果,仍会遇到相同问题。

解决方案

需要先清理数值中的逗号,再将字符串转为数字类型,才能进行数值比较。完整查询语句如下:

{container="my-container"} |= `Executed DbCommand`
| regexp `\((?P<query_ms_str>[0-9]+(?:\,?[0-9]+)?)ms\)`
| replace query_ms_str "," ""
| to_number query_ms_str as query_ms
| query_ms > 30000

步骤说明

  • 正则捕获:通过regexp捕获括号内的数值部分(如3,768),命名为query_ms_str,不包含单位ms
  • 清理逗号:使用replace将query_ms_str中的逗号替换为空字符串,得到纯数字字符串(如3768)
  • 转数字类型:用to_number将处理后的字符串转为数字类型,命名为query_ms
  • 数值筛选:直接使用数字类型的query_ms进行筛选,30000对应30秒

内容的提问来源于stack exchange,提问作者Eddie Deyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:23:26