Logstash 采集文件时如何把文件名加为字段?

Logstash file input 自带 path 字段(完整路径),用 grok 从 path 提取文件名段即可得到文件名字段。本文给出 grok 模式与多目录场景的用法。

最佳实践
Logstash 采集文件时如何把文件名加为字段?封面

file input 采集的每条事件自带 path 字段(如 /var/log/app/order.log)——用 grok 从路径中提取最后的文件名片段即可:%{GREEDYDATA}/%{GREEDYDATA:filename}

配置示例

input {
  file {
    path => "/var/log/app/*.log"
    start_position => "beginning"
  }
}

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

只想要文件名不要扩展名

grok {
  match => { "path" => "%{GREEDYDATA}/%{NOTSPACE:filename_base}\.log" }
}

按文件名分流到不同索引

output {
  elasticsearch {
    hosts => ["es:9200"]
    index => "%{filename}-%{+YYYY.MM.dd}"
  }
}

观测云对照

观测云 DataKit 采集文件日志自动附带文件名与路径标签,查看器直接按文件名筛选,无需 grok 提取。

常见问题(FAQ)

Q:Windows 路径怎么写? 正则中用 [\\/] 同时兼容正斜杠与反斜杠。

Q:sincedb 记录会影响吗? 不影响——path 字段是每次读取时写入事件的。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台