Kafka管道Regex匹配异常求助:Schema映射函数正则不匹配
问题解决步骤
核心问题分析
你的正则在Kafka管道中失效,主要有三个原因:
- 字段路径错误:日志中
message是嵌套结构体,实际字符串内容存储在message.string字段,而非直接的message字段 - 正则转义缺失:JSON配置中反斜杠需双重转义(如
\d要写成\\d),否则转义符会被JSON解析器忽略 - 配置语法错误:原
mapping.config存在括号不闭合、格式不完整的问题
修正后的完整配置
"mapping.config": "fields = [ { condition { function = \"MATCHES_REGEX\", args = [ \"message.string\", \"\\[Error \\d{4}\\]\" ] }, mapping { \"timestamp\" = \"timestamp\", \"host\" = \"host\", \"service\" = \"service\", \"message.errorcode\" = { function = \"REGEX_EXTRACT\", args = [ \"message.string\", \"\\[Error (\\d{4})\\]\", 1 ] } } } ]"
关键修改点说明
- 字段路径修正:将所有正则操作的目标字段从
message改为message.string,确保指向真正的日志字符串内容 - 正则转义修正:
- 匹配方括号
[/]时,需写成\\[/\\](JSON双重转义) - 数字匹配
\d需写成\\d
- 匹配方括号
- 语法修正:补全缺失的闭合括号,确保JSON格式合法
- 正则精准度优化:直接匹配
[Error XXXX]格式,避免误匹配其他位置的"Error"字符串
验证说明
针对你提供的日志条目:
"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>"}
修正后的配置会成功匹配,并提取出错误码4007,最终在topic2生成:
"message": {"errorcode": "4007"}
内容的提问来源于stack exchange,提问作者user11189194
相关产品推荐
相关产品推荐

