2015-02-02 2 views
0
  1. я пытаюсь разобрать этот лог строку: - 2014-04-29 13: 04: 23,733 [главная] INFO (api.batch.ThreadPoolWorker) Command- параметры командной строки для этого запуска: вот файл конфигурации logstash я использую:Logstash 1.4.2 Grok фильтр: _grokparsefailure

input { 
 
     stdin {} 
 
} 
 

 
filter { 
 
grok { 
 
    match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{DATA:mydata} "] 
 
    } 
 

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

 
output { 
 
    elasticsearch { 
 
    host => "localhost" 
 
    } 
 
    stdout { codec => rubydebug } 
 
}
Вот результат я получаю:

{ 
 
     "message" => " - 2014-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) Commans run:", 
 
     "@version" => "1", 
 
    "@timestamp" => "2015-02-02T10:53:58.282Z", 
 
      "host" => "NAME_001.corp.com", 
 
      "tags" => [ 
 
     [0] "_grokparsefailure" 
 
    ] 
 
}

Пожалуйста, если кто-нибудь может помочь мне найти, где проблема по образцу Горка. Я попытался разобрать эту строку в http://grokdebug.herokuapp.com/, но она анализирует только временную метку,% {WORD} и% {LOGLEVEL}, остальное игнорируется!

ответ

0

В вашей конфигурации есть две ошибки.

Первый

Ошибка в GROK является JAVACLASS, вы должны включить () в шаблоне, например: \(%{JAVACLASS:class}\.

Второй

date фильтр match имеют два значения, первое это field вы хотите, чтобы разобрать, так что в вашем примере это time, не timestamp. Второе значение - это шаблон даты. Вы можете обратиться к here

Вот конфиг

input { 
     stdin { 

     } 
} 

filter { 
     grok { 
       match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} \(%{JAVACLASS:class}\) %{GREEDYDATA:mydata}" 
       ] 
     } 
     date { 
       match => [ "time" , "YYYY-MM-dd HH:mm:ss,SSS" ] 
     } 
} 

output 
{ 
     stdout { 
       codec => rubydebug 
     } 
} 

FYI. Надеюсь, это может вам помочь.

+0

Благодарим вас за отзыв. Я уже пробовал ваше решение, добавив, что \ (% {JAVACLASS: class} \ не решает проблему. Паттерн JAVACLASS работает нормально, когда я использую его только в шаблоне соответствия, он извлекает класс java: {... " class "=>" api.batch.ThreadPoolWorker " } Но когда я добавляю остальные шаблоны вместе с JAVACLASS, он дает мне тег ошибки grokparsefailure. Я тестировал другие шаблоны, которые они отлично работают, это просто объединение всех их вместе с JAVACLASS, который создает ошибку. Любые предложения, пожалуйста? – sally

+0

Ваш образец журнала работал в моей конфигурации. И шаблон JAVACLASS: \\ (% {JAVACLASS: class} \\), включите '\\'. my config. –

+0

Я попытался снова после удаления всех неудачных журналов из elasticsearch, и теперь это сработало. Большое вам спасибо за вашу помощь. – sally

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