2014-11-30 2 views
0

Logstash를 사용하여 TCP를 통해 네트워크를 통해 전송되는 예외 로그를 ​​구문 분석합니다. 예외 로그가 여러 줄이므로 데이터를 구문 분석하기 위해 여러 줄 필터를 사용합니다. 불행하게도 마지막 예외 로그는 인식되지 않습니다. logstash는 (여러 줄 패턴으로 인해) 끝나는 곳을 알지 못하기 때문입니다. 그것이 끝나는 곳을 인식하는 것이 가능합니까? 예외의 끝은 무엇이든 될 수 있습니다 (어떻게 정규식을할까요?). 아니면 TCP 스트림이 종료되었는데 예외가 또한 그 끝까지 도달했기 때문에 어떻게 든 알 수 있습니까?Logstash 설정에서 예외 로그의 마지막 예외가 누락되었습니다.

<?php 
$content = "2014-11-25T20:11:55+00:00 ERR (3): 
exception 'Exception' with message 'some error' in /private/var/www/index.php:88 
Stack trace: 
#0 {main} 
2014-11-25T20:11:56+00:00 ERR (3): 
exception 'Exception' with message 'some error' in /private/var/www/index.php:88 
Stack trace: 
#0 {main}"; 

$fp = stream_socket_client("tcp://127.0.0.1:1337", $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    fwrite($fp, $content); 
    fclose($fp); 
} 

만 이벤트 로그로 첫 번째 예외를 인식이 예제를 실행 : 여기

input { 
    tcp { 
     port => 1337 
     type => "exception" 
    } 
} 
filter { 
    if [type] == "exception" { 
     multiline { 
      pattern => "%{TIMESTAMP_ISO8601}" 
      negate => true 
      what => previous 
     } 
     grok { 
      match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log_level} \(%{INT:log_level_code}\): exception '%{DATA:exception_name}' with message '%{DATA:exception_message}' in %{PATH:path} Stack trace: %{GREEDYDATA:stack_trace}"] 
      remove_field => ["log_level", "log_level_code", "host"] 
     } 
     date { 
      match => ["timestamp", "ISO8601"] 
     } 
    } 
} 
output { 
    elasticsearch { host => localhost } 
    stdout {} 
} 

는 TCP를 통해 예외를 보내는 샘플 PHP 스크립트입니다 : 여기

내 logstash 구성 파일입니다 . 두 번째 예외는 다음 타임 스탬프가 도착하자마자 인식되며 데이터의 스트림이 끝날 때이 경우가 아닙니다.

답변

1

멀티 라인 코덱은 마지막 이벤트를 플러시 할 수 없습니다. multiline 필터에는 enable_flush 매개 변수가 있지만 프로덕션 용도로는 나열되지 않습니다.

는 슬프게도, 유일한 해결책은 더 예외 :

0

1.5.0 (AN RC로 현재를)하는 것입니다이 문제를 해결하지만, 여러 필터 . Original JIRA bug, closed GitHub issue.

동일한 문제가 발생하여 Jira/GitHub 토론에서 문제가 발생했습니다. 몇 번의 시도가 있었지만 효과를 얻었습니다. 나는 플러시 이벤트가 발생할 때까지 기다릴 때 인내심을 가지고 말할 것입니다. 몇 초 기다립니다.

관련 문제