如何使用loki查询日志中大于某一数字的值的日志

简介

loki是一款轻量级的日志收集中间件,比elk体系占用的内存更小,采用go语言开发,可以利用grafana来查询loki中存储的日志,loki存储日志只对提前预设的标签做索引,所以日志存储空间占用比elk小很多。

方法

loki只对提前预设的标签做索引,但如果我们想给标签之外的文本根据其值代表的数字做判断,可以利用(Parser expression )解析器表达式将文本解析成标签再判断,例如:

thread=testThread, info, sqlCost=23ms, sql=select * from user

要筛选sqlCost值大于20的日志,可以采用如下表达式:

{app="testApp"} |= `sqlCost=` | pattern `<_> sqlCost=<costTime>ms, <_>` | costTime >= 20

原理是先筛选有sqlCost= 字符串的日志,然后利用pattern解析器将标签解析命名成costTime。

pattern解析器语法非常简单:<_>代表未命名分组,把无关文本排除;即是命名分组,创建了一个新的costTime标签,使用时注意空格、标点符号要匹配好。

其实除了pattern解析器,官方还提供了 JSON, logfmt, regexp and unpack等类型的解析器,可以参考官方文档学习怎么在查询时提取新的标签来做筛选。
https://grafana.com/docs/loki/latest/query/log_queries/#pattern

posted @ 2024-01-05 18:13  心与梦  阅读(36)  评论(0编辑  收藏  举报