2014-10-15 5 views
0

나는 여전히 꽤 많이 익숙하지 않은 logstash를 여러 줄 로그 메시지에서 파싱하는 것으로 보인다. 그러나 나는 (로그 분석 로그를 분석하기 위해) 노력하고있는 것을 기대하고있다. 누군가가 나를 일하는 해결책으로 안내 할 수 있기를 바란다.그로크 멀티 라인 레시피?

[2014-10-15 22:34:36,958][DEBUG][action.search.type  ] [kafka] [logstash-2014.10.15][1], node[RBRz8xNgQQKsAnEgbjqVTw], [P], s[STARTED]: Failed to execute [[email protected]] lastShard [true] 
org.elasticsearch.search.SearchParseException: [logstash-2014.10.15][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"facets":{"stats":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"status:200"}},{"query_string":{"query":"status:304"}},{"query_string":{"query":"_missing_:status"}},{"query_string":{"query":"type:\"nginx-error\""}},{"query_string":{"query":"type:(-\"nginx-*\")"}},{"query_string":{"query":"status:[308 TO 999]"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577151,"to":1413412477151}}}]}}}}}}},"stats_Success":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"status:200"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577151,"to":1413412477151}}}]}}}}}}},"stats_Cache Hits":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"status:304"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577151,"to":1413412477151}}}]}}}}}}},"stats_No Status":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"_missing_:status"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577152,"to":1413412477152}}}]}}}}}}},"stats_NGINX error":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"type:\"nginx-error\""}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577152,"to":1413412477152}}}]}}}}}}},"stats_Not Nginx":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"type:(-\"nginx-*\")"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577152,"to":1413412477152}}}]}}}}}}},"stats_Failure":{"statistical":{"field":"host"},"facet_filter":{"fquery":{"query":{"filtered":{"query":{"bool":{"should":[{"query_string":{"query":"status:[308 TO 999]"}}]}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"from":1413411577152,"to":1413412477152}}}]}}}}}}}},"size":0}]] 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:660) 
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:516) 
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:488) 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:257) 
    at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:206) 
    at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:203) 
    at org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:517) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.elasticsearch.search.facet.FacetPhaseExecutionException: Facet [stats]: field [host] isn't a number field, but a string 
    at org.elasticsearch.search.facet.statistical.StatisticalFacetParser.parse(StatisticalFacetParser.java:132) 
    at org.elasticsearch.search.facet.FacetParseElement.parse(FacetParseElement.java:93) 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:644) 
    ... 9 more 

숫자로 키바 대시 보드에서 "호스트"내 사용에 balking 것 같다 :

기본적으로이 같은 오류가 있습니다. 실제로 실제 오류에 관심이 없으며 효과적인 Logstash 일종의 구문 분석을 통해 Kibana를 살펴보고 현명한 오류 메시지를 볼 수있는 것에 관심이 있습니다.

나는 내 파일 입력에 대해 multiline { ... } 코덱을 사용한다고 생각하지만 그 메시지를 보면 꽤 털이 보입니다 ... 분명히 저기있는 속담 "바퀴"가 있습니다. 발명 할 필요가 있니?

답변

1

multiline {...}입니다. 아래의 스 니펫을 fileinput 유형으로 시도해보십시오.

codec => multiline 
{ 
    pattern => "(^\d+\serror)|(^.+Exception: .+)|(^\s+at .+)|(^\?s+... \d+ more)|(^\s*Caused by:.+)|(^.+ \d+ common frames omitted) 
    what => "previous" 
    multiline_tag => "multi_tagged" 
} 
1

각 예외는 날짜로 시작하므로 무시하십시오. 여기에 '필터'예제가 있지만 코덱에 대한 내용은 다음과 같습니다.

filter { 
    multiline { 
     negate => 'true' 
     pattern => "^\[%{YEAR}" 
     what => 'previous' 
    } 
    } 
} 
+0

필터 대 코덱의 장점은 무엇입니까? – ken

+1

코덱은 필터 스탠자가 시작되기 전에 메시지가 완료되기 때문에 선호되는 방법입니다. 나는 그들이 필터를 최후에 사용하지 않을 것이라고 상상한다. 필자는 필터 예제를 편리하게 게시 했으므로 게시했으며 다른 패턴보다 패턴이 더 깨끗해 보였다. –