首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于解析和提取字段的logstash中的grok正则表达式

用于解析和提取字段的logstash中的grok正则表达式
EN

Stack Overflow用户
提问于 2021-01-06 17:33:24
回答 1查看 1.2K关注 0票数 1

我试图从单个消息字段中提取某些字段。我正试图实现这一点,通过在逻辑仓库上的摸索正则表达式,这样我就可以在基巴纳看到它们。

我的日志事件如下所示:[2021-01-06 12:10:40] ApiLogger.INFO: API log data: {"endpoint":"/rest/thre_en/V1/temp-carts/13cEIQqUb6cUfxB/tryer-inform","http_method":"GET","payload":[],"user_id":0,"user_type":4,"http_response_code":200,"response":"{\"pay_methods\":[{\"code\":\"frane\",\"title\":\"R2 Partial redeem\"}],\"totals\":{\"grand_total\":0,\"base_grand_total\":0}}

整个日志有更多的信息进入不同的键值存储-基本上,我需要这些信息-

  1. 时间戳(我能拿到这个)
  2. 日志级别(我能够得到这个)日志级别上的=>,我只想要信息而不是整个Api.INFO
  3. 端点
  4. http-方法
  5. user_id
  6. user_type
  7. http_response_code
  8. 响应

我无法从3-8得到信息.我测试过了。这是由于分号(:)--这是我通过grok调试器%{SYSLOG5424SD:logtime} %{JAVACLASS:loglevel}: (?<API>\w+ \w+ \w+):所做的尝试

我试了uri和其他,但它没有工作,可能是由于结肠。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-08 09:42:34

您可以使用

代码语言:javascript
复制
%{SYSLOG5424SD:logtime} ApiLogger.%{LOGLEVEL:loglevel}: (?<API>\w+ \w+ \w+):\s*%{GREEDYDATA:json_field}

然后,您可以使用json_field解析JSON滤波器

如果您想玩regex,您应该记住regex引擎默认从左到右解析字符串。如果您想用一个正则表达式捕获几个字段,您应该确保regex引擎可以从一个部分“走”到另一个部分。如果你知道这两者之间有什么模式,有什么类型的字符,那就太棒了。否则,只能依赖.* (%{GREEDYDATA})或.*? (%{DATA})模式。

所以,作为一个节选,你可以看看

代码语言:javascript
复制
%{SYSLOG5424SD:logtime} %{JAVACLASS:loglevel}: (?<API>\w+ \w+ \w+):\s*\{"endpoint":"(?<endpoint>[^"]*)","http_method":"(?<http_method>[A-Z]++).*?"user_id":(?<user_id>[0-9]++).*?"user_type":(?<user_type>[0-9]++).*?"http_response_code":(?<http_response_code>[0-9]++).*?"response":"(?<response>.*)"

检查每个字段之间的[0-9]++.*?模式中的.*?。如果后续模式不匹配,++拥有式量词确保引擎不会重试与量化符再次修改的模式匹配。[0-9]++抓取一个数字序列,不给出它们,如果后续模式失败,整个匹配失败。.*?只需匹配除行中断字符以外的任何零个或多个字符,尽可能少。最后一个.*是贪婪的,因为它必须匹配尽可能多的字符,而不是行中断字符。

regex演示

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

https://stackoverflow.com/questions/65600601

复制
相关文章

相似问题

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