Filebeat 通过 multiline 合并多行 XML 日志,再用 xml 处理器(≥8.12)解析为嵌套 JSON 字段;若 XML 不规范,可用 dissect 提取后交由 Logstash 或 ES ingest pipeline 解析。
Filebeat 本身不直接支持 XML 格式日志的结构化解析,但可以通过组合使用 multiline、dissect 或 xml 处理器(需 8.12+ 版本)、以及合理配置 input 类型,实现对 XML 日志的采集与初步解析。
Filebeat 按行读取日志,默认以换行符为事件分隔。若 XML 日志跨多行(如格式化后的 XML),需先用 multiline 配置将其合并为一条事件:
开头、 结尾:multiline.pattern: '^' multiline.negate: true m $'ultiline.match: after multiline.flush_pattern: '
这样 Filebeat 会把从 开始、到下一个 结束之间的所有行合并为一个事件。
新版 Filebeat 内置 xml 处理器,可将 XML 字符串解析为嵌套 JSON 字段:
message)和目标字段(如 xml_parsed):processors:
- xml:
field: message
target_field: xml_parsed
encoding: utf-8解析后,xml_parsed 下会生成类似 xml_parsed.event.timestamp、xml_parsed.event.level 的路径字段(取决于原始 XML 结构)。
若 XML 标签不固定、缩进混乱或含 CDATA,xml 处理器可能失败。此时可退而求其次:
dissect 提取外层关键标签内容(如截取 ... 中的文本)grok(需配合 Logstash)或 Filebeat 的 decode_xml(仅限简单键值对)做轻量解析xml 过滤器完成解析实际部署前务必验证解析效果:
filebeat test output 确认数据能发出logging.level: debug 并查看是否报 xml parse error
filebeat -e -d "processor" 观察处理器执行前后字段变化xml_parsed.* 字段是否按预期展开