使用LogQL正则从Loki ingress-nginx日志提取请求时长过滤慢请求
可用的LogQL查询语句
你可以直接使用如下语句完成过滤需求:
{namespace="ingress-nginx"} |= "gymauto-frontend" |~ "GET (/main)" | json | regexp log `.*"[^"]+"\s+\d+\s+(?<duration>\d+\.\d+)\s+\[.*` | duration *= 1s | duration > 10s
逻辑说明
- 前半部分的日志匹配、json解析逻辑和你原有写法一致,json解析后原始nginx日志内容会存储在
log字段中 regexp阶段通过命名捕获组从log字段提取nginx ingress标准日志的$request_time(请求总耗时,单位为秒的浮点数)到duration变量duration *= 1s将提取到的字符串格式的浮点数值转换为Loki支持的时间 duration 类型- 最后通过条件过滤保留耗时超过10s的日志
可选调整
如果你需要基于上游服务实际处理时间过滤,可以修改正则提取upstream响应时间(对应样例中的20.035字段),调整后的语句如下:
{namespace="ingress-nginx"} |= "gymauto-frontend" |~ "GET (/main)" | json | regexp log `.*\s(?<duration>\d+\.\d+)\s+\d+\s+[0-9a-f]+$` | duration *= 1s | duration > 10s
内容的提问来源于stack exchange,提问作者DmitrySemenov
相关产品推荐
相关产品推荐

