2017-11-24 26 views
0

Logstash 다중 라인 코덱은 다음 로그 패키지를 보낼 때까지 마지막 이벤트 (라인)를 무시합니다.Logstash 멀티 라인 코덱이 마지막 이벤트/라인을 무시합니다.

내 logstash.conf :

input { 
    } 
    http { 
     port => "5001" 
     codec => multiline { 
      pattern => "^\[%{TIMESTAMP_ISO8601}\]" 
      negate => true 
      what => previous 
      auto_flush_interval => 15 
     } 
    } 
} 

filter{ 
    grok { 
     match => { "message" => "(?m)\[%{TIMESTAMP_ISO8601:timestamp}\]\s\<%{LOGLEVEL:log-level}\>\s\[%{WORD:component}\]\s%{GREEDYDATA:log-message}" 
    } 
} 

output { 
    elasticsearch { 
     hosts => "elasticsearch:9200" 
     index => "%{+YYYY-MM-dd}" 
    } 
} 

또한 솔루션 auto_flush_interval 작동하지 않습니다.

[2017년 7월 11일 22 : 32 : 12.345] 우편 배달을 사용

입력 :

[KCU] 글 예외 초기화 컴포넌트 "메인"자바 com.example.myproject.Book.getTitle에서 .lang.NullPointerException (Book.java:16) [2017년 7월 11일 22 : 32 : 16.345] [KCU] 상태로 돌아 1

,174 51,515,

출력 - 하나의 이벤트 (두이어야)

[2017년 7월 11일 22 : 32 : 12.345] [KCU 성분 스레드 "메인" java.lang의 예외를 초기화. com.example.myproject.Book.getTitle에서 NullPointerException이 (Book.java:16)

나는이 마지막 줄이 필요합니다.

질문 : 내가 잘못했거나 멀티 라인 코덱에 문제가 있습니까? 이걸 고치는 방법?

+0

내 대답이 귀하의 질문을 해결하는 데 도움이 되었습니까? – Phonolog

+0

같은 질문으로 답변을 얻었습니다 : https://discuss.elastic.co/t/logstash-multiline-codec-ignore-last-event-line/109006 – Jaap

답변

0

여러 줄로 된 코덱을 사용하고 있습니다. 의 사용자 구성을 살펴 보자 :

codec => multiline { 
      pattern => "^\[%{TIMESTAMP_ISO8601}\]" 
      negate => true 
      what => previous 
     } 

그것은 logline하지 않는 경우는 말한다 (negate => true)는 ISO 타임 스탬프 (pattern) 이전 로그 행 (what => previous)에 추가로 시작합니다.

하지만 누락하고있는 logline은 ISO 타임 스탬프로 시작 :

[2017년 7월 11일 22 : 32 : 16.345] [KCU] 상태로 1

그래서를 돌려 그 이전 로그 라인에 추가되지 않고 대신 Elasticsearch에 새 문서를 만듭니다.