2017-04-11 166 views
0

我有以下設置:Logstash:使用偏移量DOCUMENT_ID

FileBeat - > Logstash - > Elasticsearch - > Kibana(所有5.1.1)

當我把日誌文件(JSON )到Filebeat中,如果我嘗試在Kibana界面中看到它,相同的日誌會被添加3-4次(重複)。 檢查FileBeat日誌後,我才知道這可能是因爲Filebeat沒有收到發送日誌的確認,因此它會一直重新發送。 停止接收重複的文件我想我將不得不在logstash配置文件中使用document_id

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

我的問題是,偏移字段唯一爲每個文檔? 這是一個正確的方法來停止接收重複?

回答

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給出的偏移量。如果你的時間標記像秒鐘那樣低分辨率,我會這樣做。我會更新答案以包含偏移量。 –