如何使用Logstash Dissect插件以Unicode串\u0000�\u0005为分隔符拆分Kafka数据
Logstash dissect插件使用特殊Unicode序列作为分隔符的配置方法
你拿到的Kafka数据结构为前缀字符串 + \u0000�\u0005分隔符 + JSON内容,要使用该特殊Unicode序列作为分隔符拆分数据,可按以下步骤操作:
- 首先确认分隔符的实际字节:
\u0000�\u0005对应字节序列为0x00(空字符) + 0xEF 0xBF 0xBD(替换字符�的UTF-8编码) + 0x05(ENQ控制字符),dissect插件支持直接使用Unicode字符作为分隔符,不需要额外转义,直接写入pattern即可。
基础配置示例:filter { dissect { mapping => { "message" => "%{prefix_part}\u0000�\u0005%{json_part}" } } # 可选:拆分后直接解析JSON内容 json { source => "json_part" remove_field => ["json_part", "message"] } } - 如果直接写Unicode字符匹配失效,大概率是字符编码解码时出现了偏移,可改用字节匹配的方式处理,兼容性更强:
兼容配置示例:filter { ruby { code => ' raw_msg = event.get("message").b # 替换为你确认后的分隔符字节序列 delimiter = "\x00\xEF\xBF\xBD\x05".b split_parts = raw_msg.split(delimiter, 2) event.set("prefix_part", split_parts[0].force_encoding("UTF-8")) if split_parts.length > 1 event.set("json_part", split_parts[1].force_encoding("UTF-8")) end ' } json { source => "json_part" } }
注意:如果你的数据中�是其他编码异常产生的占位符,建议先打印原始数据的十六进制字节序列,确认分隔符的实际字节值后再替换配置中的对应内容即可。
内容的提问来源于stack exchange,提问作者uu7zyt6
相关产品推荐
相关产品推荐

