2017-04-11 8 views
0

가 document_ID 오프셋 (offset) 사용 :Logstash : 내가 설정 다음 한

FileBeat -> Logstash -> Elasticsearch -> 키바 (모든 5.1.1)

나는 로그 파일을 밀어

( JSON)를 Filebeat에 저장하고 Kibana Interface에서이 파일을 보려고하면 동일한 로그에 3-4 시간 (중복)이 추가됩니다. FileBeat 로그를 검사 한 후에 Filebeat가 보낸 로그에 대한 승인을받지 못해서 다시 보내지므로이 메시지가 나타날 수 있음을 알게되었습니다. 중복 문서 수신을 중단하려면 logstash 구성 파일에 document_id을 사용해야합니다.

output 
{ 
    elasticsearch { 
     document_id => "%{offset}" 
     index => "ap-index" 
     hosts => ["localhost:9222"] 
    } 
} 

내 질문은, 오프셋 (offset) 필드가 각 문서에 대해 고유인가? 그 복제물 수신을 중지하는 올바른 방법입니까?

답변

1

Filebeat가 Logstash로부터 수신 확인을받지 못하는 경우 이것은 서명 또는 문제이므로 먼저 루트 원인을 찾아야합니다 (파이프 라인에 정체가있을 수 있음).

로그 파일이 두 개 이상이거나 로그 회전을 할 경우 오프셋이 고유하지 않습니다. 로그 메시지에 타임 스탬프가 포함 된 경우 지문 필터를 사용하여 메시지의 해시를 생성하는 것이 좋습니다. 그런 다음 Elasticsearch에서 지문 해시를 문서 ID로 사용하십시오.

input { 
    beats { 
    port => 5044 
    } 
} 

filter { 
    fingerprint { 
    method => "SHA1" 
    key => "some_random_hmac_key" 
    source => ["[beat][hostname]", "offset", "message"] 
    concatenate_sources => true 
    target => "[@metadata][id]" 
    } 
} 

output { 
    elasticsearch { 
    hosts => "localhost:9200" 
    manage_template => false 
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" 
    document_type => "%{[@metadata][type]}" 
    document_id =>"%{[@metadata][id]}" 
    } 
} 
+0

로그 파일이 하나 더 많을 수 있으며 로그 회전이있을 수 있습니다. 또한 타임 스탬프는 고유하지 않을 수도 있습니다. 이 경우 해시가 다를 수 있습니다 ?? –

+0

해당 해시를 수정하여 Filebeat에서 제공 한 오프셋을 통합 할 수 있습니다. 타임 스탬프가 초 단위와 같이 낮은 해상도 인 경우이 작업을 수행합니다. 오프셋을 포함하도록 답변을 업데이트하겠습니다. –