2014-06-18 4 views
2

요약 :
logstash -> elasticsearch -> 로그 파일에
이벤트 필드 @timestamp (형식이 포함 된 디버그 출력에 표시된 날짜를 구문 분석 실패 : 2014-06-18T11 : 52 : 45.370636 + 02 : 00)
이벤트는 실제로 elasticsearch로 처리되지만 실패한 구문 분석 오류가 표시됩니다.Logstash : 실패 분석 날짜

버전 :
Logstash 1.4.1
Elasticsearch 1.20

내가 잘못 할 뭔가가 있나요?

{"@timestamp":"2014-06-18T11:52:45.370636+02:00","Level":"Info","Machine":"X100","Session":{"MainId":0,"SubId":"5otec"},"Request":{"Url":"http://www.localhost:5000/Default.aspx","Method":"GET","Referrer":"http://www.localhost:5000/Default.aspx"},"EndRequest":{"Duration":{"Main":0,"Page":6720}}} 

내가이 logstash의 설정을 사용합니다 :

나는이 같은 이벤트를 포함하는 로그 파일이

input { 
    file { 
    path => "D:/testlogs/*.log" 
    codec => "json" 
    start_position => [ "beginning" ] 
    } 
} 
filter { 
    date { 
    match => [ "@timestamp", "ISO8601" ] 
    } 
} 
output { 
    stdout { 
    codec => json 
    } 
    elasticsearch { 
    protocol => http 
    host => "10.125.26.128" 
    } 
} 

내가 얻을 로그 파일의 이벤트에서이 설정에 logstash을 실행하면 다음 오류 :

[33mFailed parsing date from field {:field=>"@timestamp", :value=>"2014-06-18T12:18:34.717+02:00", :exception=>#<TypeError: cannot convert instance of class org.jruby.RubyTime to class java.lang.String> 

이제 이벤트는 실제로 elasti로 가져옵니다 csearch,하지만 난이 오류를 참조하십시오.
이 문제가 발생하거나 이러한 구문 분석 오류가 무시 될 수 있습니까?

답변

1

로그는 이미 json 형식이므로, 날짜를 구문 분석 할 필요가 없습니다. json 필터를 사용하여 모든 필드와 값을 구문 분석 할 수 있습니다. 이 구성의 예를 들어

:

input { 
    file { 
     path => "D:/testlogs/*.log" 
     codec => "json" 
    } 
} 

filter { 
    json { 
     source => "message" 
    } 
} 

output { 
    stdout { 
      codec => rubydebug 
    } 
} 

나는 성공적으로 로그를 구문 분석 할 수 있습니다. 그리고 출력은 다음과 같습니다

{ 
"@timestamp" => "2014-06-18T17:52:45.370+08:00", 
    "Level" => "Info", 
    "Machine" => "X100", 
    "Session" => { 
    "MainId" => 0, 
    "SubId" => "5otec" 
}, 
    "Request" => { 
     "Url" => "http://www.localhost:5000/Default.aspx", 
     "Method" => "GET", 
    "Referrer" => "http://www.localhost:5000/Default.aspx" 
}, 
"EndRequest" => { 
    "Duration" => { 
     "Main" => 0, 
     "Page" => 6720 
    } 
}, 
    "@version" => "1", 
     "host" => "ABC", 
     "path" => "D:/testlogs/*.log" 
} 

나는 또한 파일 입력에 codec => json이 작동하지만, 표준 입력 입력의 작품되지 않도록 노력합니다. 어쩌면 이것은 logstash의 버그 일 수 있습니다.

희망이 도움이 될 수 있습니다.

+0

감사합니다. 이상한 점은 설정을 사용하면 화면에 어떤 표준 출력도 나오지 않는다는 것입니다. – user3024742

+0

나는 당신이 가진 결과를 얻지 못하는 이유를 논리적으로 밝혀 내지 못하는 것 같습니다. 나는 나의 질문과 같이 내 자신의 사건으로 test.log를 만들었다. D :/testlogs에 저장했습니다. 당신의 설정을 사용하고 logstash를 실행하십시오. 나 또한 로그 파일을 UTF-8 및 ANSI로 저장하려고했으나 코덱 => json을 제거했습니다. "날짜 일치"로 설정을 시도하면 작동하지만 항상 그렇지는 않습니다. 항상 logstash -> 출력 ok를 실행하는 것은 아닙니다. logstash를 다시 종료하십시오 -> no output. – user3024742

+0

anwser에 다시 한 번 감사드립니다. 다시 설정을 시도했는데 제대로 작동했습니다. 구성과 관련하여 이전에 가지고 있던 문제점은 sincedb 기능성이있을 가능성이 큽니다. 그래서/dev/null에 추가했을 때 모든 작업이 잘 진행되었습니다. 감사. – user3024742