You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash中添加当前目录名及父目录名作为字段?

如何用Logstash添加Artist和Album目录名作为字段

没问题,这个需求完全可以实现!核心思路是利用Logstash File输入插件自动生成的path字段——它会记录每个被处理文件的完整路径,我们只需要从这个路径里解析出对应的Artist和Album目录名就行。下面给你两种实用的实现方式:

方法一:使用Dissect过滤器(简单直观)

Dissect插件专门用来拆分结构化字符串,非常适合处理路径这种有固定层级的内容。假设你的文件完整路径格式是/任意父路径/ArtistName/AlbumName/SongsList.xml,可以这么配置:

filter {
  dissect {
    mapping => {
      "path" => "%{*}/%{artist}/%{album}/%{filename}"
    }
  }
  # 可选:如果不需要保留filename字段,用mutate删掉它
  mutate {
    remove_field => ["filename"]
  }
}

这里的%{*}表示忽略前面的所有路径部分,直接提取倒数第二和第三段作为album和artist字段,配置起来非常简洁。

方法二:使用Ruby过滤器(灵活适配复杂路径)

如果你的路径结构有特殊情况(比如层级不固定、存在特殊字符),Ruby过滤器可以提供更灵活的自定义逻辑:

filter {
  ruby {
    code => "
      # 按路径分隔符拆分(Linux/macOS用'/', Windows用'\\',注意转义)
      path_segments = event.get('path').split('/')
      # 倒数第二段是Album目录名,倒数第三段是Artist目录名
      event.set('album', path_segments[-2])
      event.set('artist', path_segments[-3])
    "
  }
}

如果是Windows环境,记得把split('/')改成split('\\'),因为Windows的路径分隔符是反斜杠,需要转义才能在Ruby代码里正确识别。

测试建议

配置完成后,可以临时在output部分添加stdout { codec => rubydebug },运行Logstash后查看控制台输出的事件,确认artist和album字段是否已经正确生成,没问题再接入你的索引即可。

内容的提问来源于stack exchange,提问作者Harish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:29