我有一个要求,我需要首先匹配日志中的正则表达式,如果匹配,然后执行正则表达式提取,但不知何故,正则表达式在Kafka管道中不工作,而正则表达式在任何在线正则表达式测试平台上测试时都完全正常。
假设我有输入主题:topic 1和output topic:topic 2 topic 1包含所有有某种错误的日志条目。
我已经创建了一个转换管道,其中使用Map的模式为:
"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]}]
日志中的错误如下所示(在toipc 1中):
"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>"}
我需要读取方括号[]中的值,以便在输出主题topic 2中获得类似于“message”的内容:{“errorcode”:4007
有谁能帮帮我吗
先谢谢你了。
我已经尝试了什么正则表达式,但日志条目被跳过,假设它不匹配正则表达式。
{ function = "MATCHES_REGEX", args = [ "message", "Error .+?\]" ] { function = "MATCHES_REGEX", args = ["message", "Error\s\d+"] } { function = "MATCHES_REGEX", args = [ "message", "summary>\[Error(.+?)\]"] } { function = "MATCHES_REGEX", args = [ "message", "Error (\d{4})"] } { function = "MATCHES_REGEX", args = [ "message", "Error \d{4}"] }
1条答案
按热度按时间vyu0f0g11#
我的问题在使用Java兼容的正则表达式后得到了解决:
我使用的是
summary>.{1}Error.{1}(.{4})
而不是summary>\[Error(.+?)\]
,它工作正常。