我的Schema映射函数在从Kafka管道消费时不匹配正则表达式,尽管正则表达式看起来很好



我有一个要求,我需要首先匹配日志中的正则表达式,如果它匹配,然后做正则表达式提取,但不知何故,正则表达式在Kafka管道中不工作,而正则表达式在任何在线正则表达式测试平台上测试时完全正常。

假设我有输入主题:topic1和输出主题:topic2Topic1包含所有有某种错误的日志条目。

我已经创建了一个使用映射的模式的转换管道:

"mapping.config":"fields = [ { condition { function = "MATCHES_REGEX", args = [ "message", "Error d{4}"] }, mapping { "timestamp" = "timestamp", "host" = "host", "service" = "service",  "message.errorcode" ={ function = "REGEX_EXTRACT", args = ["message", "Error (d{4})", 1]}]

日志中的错误如下(在toipc1中):

"message": {"string": "<userId xmlns="">xxxxxxxxx</userId><command type="Error" echo="test" xsi:type="c:ErrorResponse" xmlns:c="C" xmlns=""><summary>[Error 4007] Invalid login ID: xxxxxx</summary><summaryEnglish>[Error 4007] Invalid login ID: xxxxx</summaryEnglish></command>"}

我需要读取方括号[]内的值这样我就可以在输出中得到类似topic2的东西message"; {"errorcode"; "4007"}

有谁能帮我一下吗

提前感谢。

我尝试了什么正则表达式,日志条目被跳过,假设它不匹配正则表达式。

{ function = "MATCHES_REGEX", args = [ "message", "Error .+?]"  ] { function = "MATCHES_REGEX", args = ["message", "Errorsd+"] } { function = "MATCHES_REGEX", args = [ "message", "summary>[Error(.+?)]"] } { function = "MATCHES_REGEX", args = [ "message", "Error (d{4})"] } { function = "MATCHES_REGEX", args = [ "message", "Error d{4}"] }

使用Java兼容的正则表达式后,我的问题已修复:

我使用summary>.{1}Error.{1}(.{4})而不是summary>[Error(.+?)],它工作了。我使用https://regex101.com/

验证了它

最新更新