2016-10-12 4 views
2

Я настроил мой конфигурационный файл 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 и фильтры в моем файле конфигурации на основе официальной документации, но никаких шансов.

ответ

0

Ваш шаблон «access_log *» также будет соответствовать всем старым файлам, но logstash игнорирует любые файлы старше дня. См. Параметр ignore_older в файле {} input. Когда вы догоняете старые файлы, вы можете установить это более высокое значение.

Как только вы пойманы, я выпустил новую конфигурацию, которая смотрела только на «access_log» (без шаблона, это последний файл).

+0

Я не нашел параметр 'old_than' в файле {} здесь: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html, но' ignore_older' да. Фактически этот параметр относится к последней измененной дате файла журнала, а не последней дате внутри него. Вы знаете, как я могу изменить параметры, чтобы получить только последний файл access_log после того, как вы получили других в конкретную дату? – Drwhite

+0

Да, это действительно ignore_older. Я обновил ответ. Если вы хотите посмотреть возраст каждой записи внутри файла, вам нужно будет сделать это с помощью рубинового фильтра, чтобы вычислить возраст, а затем отбросить событие, если оно находится за пределами того, что вы хотите. –

Смежные вопросы