Logstash не обновляет @timestamp из журнала apache

Если вы заполняете журналы в logstash, вы должны попытаться каким-то образом вытащить правильные временные метки. В противном случае они присваиваются времени, когда строка журнала была получена logstash.

Это достигается с помощью фильтра date, например:

date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] }

Но, к сожалению, у меня это не работает.

Итак, у меня есть следующий лог-файл apache:

10.80.161.251 - - [15/Oct/2015:09:13:45 +0000] "- -" "POST /xxx HTTP/1.1" 200 696 29416 "-" "xxx" 4026

И следующий паттерн

ACCESS_LOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:[@metadata][timestamp]}\] "(?:TLSv%{NUMBER:tlsversion}|-) (?:%{NOTSPACE:cypher}|-)" "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes_in}|-) (?:%{NUMBER:bytes_out}|-) %{QS:referrer} %{QS:agent} %{NUMBER:tts}

И следующий конфиг logstash

# INPUTS
input {
    file {
        path => '/var/log/test.log'
        type => 'apache-access'
    }
}

# filter/mix/match
filter {
    if [type] == 'apache-access' {
        grok {
            patterns_dir => [ '/root/logstash-patterns' ]
            match => [ "message", "%{ACCESS_LOG}" ]
        }

        if !("_grokparsefailure" in [tags]) {
            mutate { add_field => ["timestamp_submitted", "%{@timestamp}"] }

            date {
                match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
            }
        }
    }
}

# now output
output {
    stdout { codec => rubydebug }
}

Что я здесь делаю не так. Я пробовал добавлять часовые пояса, локали и многое другое. И все равно не работает. Любая помощь приветствуется (плюс напиток по выбору, если вы оказались в софии, болгарии).


person zeridon    schedule 15.10.2015    source источник


Ответы (1)


Примечание для себя: читайте внимательнее

Проблема здесь не в совпадении с правильным полем.

Из-за шаблона по умолчанию для журналов apache отметка времени из журнала находится в [@metadata][timestamp], а не в timestamp

Итак, фильтр совпадения даты должен быть:

date {
    match => [ "[@metadata][timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
person zeridon    schedule 15.10.2015