grok 正则表达式模式匹配

grok regex pattern matching

我想为此找到 grok 模式:

INFO: 200000 packets. Current packet is class com.navtech.kernel.flat.FlatCombo [Loader] [tstamp: 1866 time: 1851.4 (30:51) split: 03.2] [Memory: 3.320G total: 22.20G free: 18.88G]

我试过了

\A(?:%{LOGLEVEL:level})%{GREEDYDATA:message}\s(?:%{JAVACLASS:caller_class})\s+(\[%{WORD:loglevel}\]\s+)+(\[%{DATA:ts}\]\s+)+(\[%{DATA:mem}\])

但现在我缺少的是提取 "Memory:" 和 "total:" 那么我将如何为此编写正则表达式?

您可以使用

^(?:%{LOGLEVEL:level}):\s*%{DATA:message}\s*(?:%{JAVACLASS:caller_class})\s+\[%{WORD:loglevel}\]\s+(\[%{DATA:ts}\]\s+)+(\[\s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?\])

其中%{DATA:mem}替换为\s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?

  • \s*\S+\s+ - 0+ 个空格、1+ 个空格以外的字符和 1+ 个空格(我们跳过 Memory:
  • %{BASE10NUM:memory}\S* - 由数字+数字后零个或多个非空白符号组成的内存值
  • \s+\S+\s+ - 1+ 个空格、1+ 个空格以外的字符和 1+ 个空格(我们跳过 total:
  • %{BASE10NUM:total} - total 数字值
  • .*? - 第一个 ]
  • 之前的任何 0+ 个字符

查看测试画面: