前置条件:Linux Logstash 5.5.0(其他版本请查阅一下文档)
使用logstash把日志从文件输出到文件,根据输入文件的路径,确定输出文件的文件名。配置如下:
input {
stdin{}
file {
path => "/tmp/app1/instance1/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => {
"path" => "(?<app_name>app\d?)"
}
}
grok {
match => {
"path" => "(?<app_instance>instance\d?)"
}
}
grok {
match => {
"message" => "^(?<request_time>\d{4}-\d{2}-\d{2})\t"
}
}
}
output {
stdout {
codec => "json"
}
file {
codec => "json"
path => "/tmp/%{app_name}_%{app_instance}_%{request_time}.olog"
}
}
如果不想用多个grok,可以配置一个grok,然后将属性break_on_match设置为false。
grok {
break_on_match => false
match => {
"path" => "(?<app_name>app\d?)"
"path" => "(?<app_instance>instance\d?)"
"message" => "^(?<request_time>\d{4}-\d{2}-\d{2})\t"
}
}
本文介绍了如何在Logstash中配置文件输入和输出,并利用grok解析器从日志文件路径中提取变量,用于动态生成输出文件名。示例配置展示了如何从access.log文件中提取app_name、app_instance和request_time字段,最终根据这些字段动态生成输出文件路径。

2267

被折叠的 条评论
为什么被折叠?



