我已将logstash配置文件配置为读取apache访问日志,如下所示:
input {
file {
type => "apache_access"
path => "/etc/httpd/logs/access_log*"
start_position => beginning
sincedb_path => "/dev/null"
}
}
filter {
if [path] =~ "access" {
mutate { replace => { "type" => "apache_access" } }
grok {
match => { "message" => "%{IPORHOST:clientip} - %{DATA:username} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)" }
}
kv {
source => "request"
field_split => "&?"
prefix => "requestarg_"
}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
host => "10.13.10.18"
cluster => "awstutorialseries"
}
}
我在目录/etc/httpd/logs
中的文件是:
access_log
access_log-20161002
access_log-20161005
access_log-20161008
access_log-20161011
...
访问路径access_log*
中的所有文件时,如果我们拥有大量有趣的归档文件,则可以腾出时间。
在服务器中,我们每天轮换日志3天,因此我们将access_log
文件存档为access_log-{date}
并按照配置说明进行logstash,它会读取该目录中的所有access_log文件,即使存档的文件也是包括在内。
几个月之后,我们在许多文件的前面,这些文件应该是logstash应该阅读的所以它可以腾出时间来阅读它们。
Q1:有没有办法一次读取所有日志,然后只读取access_log文件?
Q2:在配置文件中是否有一种方法或自定义表达式可以在日期读取一些日志文件,而不是所有日志文件?
我已根据官方文档在配置文件上尝试了大量的conbinaison和过滤器,但没有机会。
答案 0 :(得分:0)
您的模式“access_log *”也将匹配所有旧文件,但logstash将忽略超过一天的所有文件。请参阅文件{}输入中的ignore_older参数。在追赶旧文件时,您可以将其设置为更高的值。
一旦你赶上了,我会发布一个只看“access_log”的新配置(没有通配符,这只是最新的文件)。