如何将文件路径作为属性/字段添加到解析后的flowfile中
解决方案
核心思路
你需要在GetFile之后、PartitionRecord之前增加属性提取环节,将路径片段提取为流文件的顶层属性,即可被PartitionRecord直接调用。调整后的完整流程为:GetFile Processor → UpdateAttribute Processor → ExtractGrok Processor → PartitionRecord Processor
具体配置步骤
- 第一步:确认
GetFile的默认属性输出GetFile默认会自动为每个流文件生成absolute.path属性,存储源文件的完整目录路径(比如你的场景下该属性值为/var/log/server1/account1/),无需额外配置。 - 第二步:配置
UpdateAttribute提取host和account属性
新增UpdateAttributeProcessor,添加两个自定义属性:- 属性名
host,值填写表达式:${absolute.path:replaceAll('^/var/log/([^/]+)/.*$', '$1')} - 属性名
account,值填写表达式:${absolute.path:replaceAll('^/var/log/[^/]+/([^/]+)/.*$', '$1')}
该表达式会通过正则捕获组,自动从路径中提取对应层级的目录名称作为属性值,属性会跟随整个流文件的全生命周期,所有下游Processor都可以直接调用。
- 属性名
- 第三步:配置
PartitionRecord使用自定义属性分区
在PartitionRecord的分区规则配置中,直接选择刚才定义的host和account属性作为分区维度即可,不需要再做额外转换。
可选扩展配置
如果你需要将host、account信息写入每条日志记录的内容中,可在ExtractGrok之后新增UpdateRecord Processor,将流文件属性映射为记录的内置字段即可。
内容的提问来源于stack exchange,提问作者jjammin92
相关产品推荐
相关产品推荐

