Logstash 采集文件时如何把文件名加为字段?
Logstash file input 自带 path 字段(完整路径),用 grok 从 path 提取文件名段即可得到文件名字段。本文给出 grok 模式与多目录场景的用法。
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 字段是每次读取时写入事件的。