Regex Grok-解析可选字段
我有来自卡夫卡的数据,我想把它们发送到ElasticSearch。我有一个这样的日志,上面有标签:Regex Grok-解析可选字段,regex,logstash,field,logstash-grok,Regex,Logstash,Field,Logstash Grok,我有来自卡夫卡的数据,我想把它们发送到ElasticSearch。我有一个这样的日志,上面有标签: <TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN></TOTO> 它可以工作,但有时日志会有这样一个新字段(带有标签): APPLI|u A | PRF | ENV|u 1 | 003new 我希望得到带有此字段(TP标记)的行和不带此
<TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN></TOTO>
它可以工作,但有时日志会有这样一个新字段(带有标签
):
APPLI|u A | PRF | ENV|u 1 | 003new
我希望得到带有此字段(TP标记)的行和不带此字段的行。如何才能做到这一点?如果您有一个可选字段,您可以将其与一个可选的命名捕获组进行匹配:
(?:<TP>%{WORD:TP}</TP>)?
^^^ ^
这是我用来阅读的过滤器 我创建了自己的模式,称为“内容”,它将检索TP标记中的任何内容
\<ID_APPLICATION\>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}\<\/ID_APPLICATION\>\<TN>%{NUMBER:TN}\<\/TN\>(\<TP\>(?<content>(.)*)\<\/TP\>)?
\%{WORD:APPLICATION}\\\\\\%{WORD:PROFIL}\\\\\\\\\%{WORD:code}\\\\%{NUMBER:TN}\(\(?()*)\)?
基本上,我只是在您的模式中添加了一个可选标记
(<TP> ... </TP>)?
(…)?
为了检索内容(我假设可以是任何内容),我在可选标记中添加了以下内容
(?<content>(.)*)
(?()*)
您是否使用:作为调试器?看起来您可以使用一个可选组:%{WORD:APPLICATION}\\\\\\\\\\\\\\\%{WORD:ENV}\\\\\\\\\%{WORD:code}%{NUMBER:TN}(?:%{WORD:TP})?
。请尝试让我知道这是否对你有效。它有效!谢谢!!请考虑接受。
\<ID_APPLICATION\>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}\<\/ID_APPLICATION\>\<TN>%{NUMBER:TN}\<\/TN\>(\<TP\>(?<content>(.)*)\<\/TP\>)?
(<TP> ... </TP>)?
(?<content>(.)*)