Я настроил мой конфигурационный файл logstash читать Apache журналов доступа, как это:Читать журналы за последний месяц с logstash
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, поскольку в config говорится, что он считывает все файлы access_log в этом каталоге, даже если они заархивированы.
через месяц мы находимся перед множеством файлов, которые должны быть прочитаны в журнале, чтобы он мог прочитать их все время.
Q1: Есть ли способ прочитать все журналы один раз, а затем просто файл access_log?
Q2: Есть ли способ или пользовательское выражение, которое нужно сделать в файле конфигурации, чтобы читать только некоторые файлы файлов журналов по дате, а не все из них?
Я пробовал много conbinaison и фильтры в моем файле конфигурации на основе официальной документации, но никаких шансов.
Я не нашел параметр 'old_than' в файле {} здесь: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html, но' ignore_older' да. Фактически этот параметр относится к последней измененной дате файла журнала, а не последней дате внутри него. Вы знаете, как я могу изменить параметры, чтобы получить только последний файл access_log после того, как вы получили других в конкретную дату? – Drwhite
Да, это действительно ignore_older. Я обновил ответ. Если вы хотите посмотреть возраст каждой записи внутри файла, вам нужно будет сделать это с помощью рубинового фильтра, чтобы вычислить возраст, а затем отбросить событие, если оно находится за пределами того, что вы хотите. –