首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >loki ingress nginx通过regexp logql提取标签

loki ingress nginx通过regexp logql提取标签
EN

Stack Overflow用户
提问于 2021-08-27 02:52:31
回答 1查看 1.2K关注 0票数 0
代码语言:javascript
复制
{namespace="ingress-nginx"} |= "gymauto-frontend" |~ "GET (/main)" | json 

我得到了这些条目

现在我需要从"log“标签中提取请求的持续时间,但是我不确定如何构造logql查询,所以我可以这样做

代码语言:javascript
复制
{namespace="ingress-nginx"} |= "gymauto-frontend" |~ "GET (/main)" | json | ...regexp () | duration > 10s

因此,我只能过滤大于10s的查询GET /main*。

日志示例:

代码语言:javascript
复制
10.110.1.132 - - [27/Aug/2021:02:37:06 +0000] "GET /main.d8e010115d6aba1bd049.js.map HTTP/2.0" 200 10842370 "https://gym.com/students/edit/173" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15" 34 20.031 [gymauto-gymauto-frontend-service-v1-8080] [] 10.110.5.217:8080 10842370 20.035 200 a7c4299aaa7ea674e91d13315
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-30 11:19:39

如果您可以使用lokiv2.3,那么您应该能够使用newly introduced pattern解析器表达式。

使用此解析器将比使用旧的regexp解析器更容易。在您的示例中,模式如下:

代码语言:javascript
复制
<_> - - <_> "<method> <path> <_>" <status> <_> "<_>" "<_>" <_> <duration> [<service>] [<_>] <_> <_> <_> <_> <_>

应该行得通。在本例中,我们从日志中提取要使用的部分:methodpathserviceduration等。用于过滤GET请求到gymauto-frontend服务上/main.*路径的查询可能如下所示:

代码语言:javascript
复制
{namespace="ingress-nginx"} 
| pattern `<_> - - <_> "<method> <path> <_>" <status> <_> "<_>" "<_>" <_> <duration> [<service>] [<_>] <_> <_> <_> <_> <_>` 

如果您检查(在Grafana中)提取的日志字段,您应该会看到类似以下内容:

您可以注意到,只提取了指定的字段,而忽略了日志行的其余部分。现在,我们可以过滤出您感兴趣的特定条目:

代码语言:javascript
复制
{namespace="ingress-nginx"} 
| pattern `<_> - - <_> "<method> <path> <_>" <status> <_> "<_>" "<_>" <_> <duration> [<service>] [<_>] <_> <_> <_> <_> <_>` 
| service=~".*gymauto-frontend.*"
| method="GET"
| path=~"/main.*" 
| duration > 10

如果您使用的是旧版本的Loki,那么您将需要用regexp替换pattern解析器表达式,并定义一个与您的日志条目匹配的regexp。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68947502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档