LogStach-Grok: как сопоставить временную метку Apache

Я понятия не имею, как сопоставить мою отметку времени. Может кто-нибудь мне помочь?

Пример моих отметок времени из журнала Apache: "2016-06-13T14:54:39.000+0100"

filter {   if [type] == "apache" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }   }
    date {
      timezone     => "UTC"
      match        => [ "timestamp" , "yyyy-mm-ddTHH:mm:ss Z"]
    }   } }

output {   stdout { codec => rubydebug } }

Выход:

{: timestamp => "2016-06-13T14: 56: 43.196000 + 0100",: message => "Ошибка: не удается зарегистрировать плагин даты фильтра. Сообщенная ошибка: \ n Недопустимый компонент шаблона: T для шаблона 'гггг-мм -dd \ THH: mm: ss Z '",: level =>: error}

Пример журнала Apache:

{"@version": "1", "@timestamp": "2016-06-14T09: 11: 23.000 + 0100", "message": "GET / page1 / page2 / HTTP / 1.1", "via": " 192.168.1.1 "," client-ip ":" 192.168.1.23 "," remote-logname ":" - "," remote-user ":" - "," recv-time ":" [14 июня 2016 г. : 09: 11: 23 +0100] "," serve-time-microsec ":" 85471 "," request ":" GET / page1 / page2 / HTTP / 1.1 "," status ":" 200 "," size " : "79648", "referer": "http://www.google.com/", "пользователь -agent ":" Mozilla / 5.0 (Windows; U; Windows NT 6.1; en-US; rv: 1.9.2.13) Gecko / 20101203 Firefox / 3.6.13 "," url ":" / page1 / page2 / "," запрос ":" "," метод ":" GET "," протокол ":" HTTP / 1.1 "," vhost ":" www.site.com "," размер полученного ":" 998 "}


person Narayana    schedule 13.06.2016    source источник
comment
Можете ли вы добавить пример строки из своего журнала? легче будет проверить.   -  person ItayD    schedule 14.06.2016
comment
Уже есть строчка из моего лога @ItayD. У меня проблема с соответствием этому формату даты 2016-06-13T14:54:39.000+0100   -  person Narayana    schedule 14.06.2016
comment
Я не вижу никакой строки, и я спрашиваю об этом, потому что, возможно, вы можете использовать лучший сопоставитель Grok, чем COMBINEDAPACHELOG, который использует формат даты %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}.   -  person ItayD    schedule 14.06.2016
comment
В любом случае формат вашей исходной метки времени: yyyy-MM-dd'T'HH:mm:ss.SSSZ   -  person ItayD    schedule 14.06.2016
comment
Спасибо, что сработал @ItayD (пропало сообщение об ошибке)! Я добавил пример полного журнала Apache. Я вижу, что отметка времени в моем интерфейсе Kibana не меняется. Могу я спросить, почему это так?   -  person Narayana    schedule 14.06.2016
comment
попробуйте удалить свои .sincedb_* файлы + удалите индекс elasticSearch, чтобы начать все сначала   -  person ItayD    schedule 14.06.2016
comment
@ItayD Извините, что снова беспокою вас. Я вижу в выводе файла, что он работает. Но в интерфейсе Kibana время не меняется. Знаете ли вы, что это может преобладать?   -  person Narayana    schedule 14.06.2016
comment
Вы пробовали то, что я написал выше? (sincedb_ & удалить индекс)   -  person ItayD    schedule 14.06.2016
comment
@ItayD Я удалил файл sincedb_, как мне удалить индекс?   -  person Narayana    schedule 15.06.2016
comment
Давайте продолжим это обсуждение в чате.   -  person ItayD    schedule 15.06.2016


Ответы (1)


Из вашего полного журнала я вижу, что он уже в формате Json, поэтому вам не нужно использовать фильтр grok в поле сообщения с использованием шаблона COMBINEDAPACHELOG. Просто используйте фильтр даты в следующем формате:

date {
     timezone  => "UTC"
     match     => [ "timestamp" , "yyyy-mm-dd'T'HH:mm:ss.SSSZ"]
}

Это мой полный файл logstash.conf, который работал с вашим примером:

input {
    file {
      path => "/var/log/test.log"
      codec => json
      start_position => "beginning"
    }
}
filter {
    date {
          timezone     => "UTC"
          match        => [ "timestamp" , "yyyy-mm-dd'T'HH:mm:ss.SSSZ"]
        }
}
output {
    stdout { 
        codec => rubydebug 
    }
}
person ItayD    schedule 14.06.2016