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+ 个字符
查看测试画面:
我想为此找到 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+ 个字符
查看测试画面: