我有来自kafka的数据,我想将它们发送给ElasticSearch.我有一个这样的日志标签:
<TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN></TOTO>
Run Code Online (Sandbox Code Playgroud)
我正在尝试grok
使用grok调试器解析它:
\<ID_APPLICATION\>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}\</ID_APPLICATION\>\<TN\>%{NUMBER:TN}\</TN\>
Run Code Online (Sandbox Code Playgroud)
它有效,但有时日志有一个像这样的新字段(带有标记的字段<TP>
):
<TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN><TP>new</TP></TOTO>
Run Code Online (Sandbox Code Playgroud)
我想得到这个字段(TP标签)和没有的行.我怎样才能做到这一点?
如果您有可选字段,则可以将其与可选的命名捕获组匹配:
(?:<TP>%{WORD:TP}</TP>)?
^^^ ^
Run Code Online (Sandbox Code Playgroud)
非捕获组不会在内存中保存任何子?
匹配,仅用于分组,量词匹配1或0次(=可选).它将创建一个TP
值为word 的字段.如果该字段不存在,则值为null
.
所以,整个模式看起来像:
<ID_APPLICATION>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}</ID_APPLICATION><TN>%{NUMBER:TN}</TN>(?:<TP>%{WORD:TP}</TP>)?
Run Code Online (Sandbox Code Playgroud)