Logstash 如何把文件名添加为日志字段?

Logstash 的 file input 默认把文件路径存在 path 字段,用 grok 从 path 提取文件名、或用 mutate+split 切分路径,即可把文件名作为独立字段。本文给出两种写法。

最佳实践
Logstash 如何把文件名添加为日志字段?封面

file input 采集的每条日志自带 path 字段(完整路径)——用 grok 从路径末尾提取文件名写入新字段即可:%{GREEDYDATA}/%{NOTSPACE:filename} 或 mutate split 取数组末位。

方法一:grok 提取

filter {
  grok {
    match => { "path" => "%{GREEDYDATA}/%{NOTSPACE:log_filename}" }
  }
}

/var/log/app/order-2024-01-15.loglog_filename = order-2024-01-15.log

方法二:mutate split

filter {
  mutate {
    add_field => { "log_filename" => "%{path}" }
  }
  mutate {
    split => { "log_filename" => "/" }
  }
  # 取数组最后一个元素需要 ruby 过滤器
  ruby {
    code => 'event.set("log_filename", event.get("log_filename").last)'
  }
}

grok 写法更简洁,推荐方法一。

典型用途

  • 按文件名区分日志来源(同一目录下多个应用);
  • 从文件名提取日期/业务线等元数据做标签;
  • 排查"哪个文件在刷屏"。

观测云对照

观测云 DataKit 的文件日志采集自动附带文件名与路径属性,在日志查看器中可直接按文件维度筛选聚合,无需配置提取规则。

常见问题(FAQ)

Q:path 字段里没有文件名只有目录? 检查 file input 的 path 配置是否用了通配符——path 字段总是完整路径。

Q:Windows 路径分隔符是反斜杠? grok 模式改为 [\\/] 兼容两种分隔符。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台