2014-09-03 114 views
1

我正在使用Logstash將日誌數據發送到Elasticsearch數據庫。我想從3改變碎片的數量爲1,並通過ES REST API發出以下命令:Logstash一直覆蓋Elasticsearch索引模板

PUT server_name/_template/logstash 
{ 
    "template": "logstash", 
     "settings": { 
      "index.number_of_replicas": "0", 
      "index.refresh_interval": "5s", 
      "index.number_of_shards": "1" 
     } 
} 

服務器responsed OK,如果我發出GET _template/logstash我可以看到,碎片的數量是現在設置爲1.

然後,我開始logstash,並將輸出設置爲將日誌傳送到Elasticsearch。沒有模板相關的設置。在我發送日誌數據後,我發現碎片的數量已恢復爲默認值(3)。

我甚至試圖通過引用Logstash配置文件中的模板來覆蓋它。不,不管我指定的設置是否重置。它看起來像Logstash一直覆蓋Elasticsearch索引設置與一些默認值,我不知道如何禁用此。

UPDATE。我已經添加了以下行Logstash配置文件,但它並沒有幫助:

manage_template => false 
    template_overwrite => true 

也試過template_overwrite設置爲false。我試圖在JSON文件中設置碎片數量的兩種不同的方式:

{ 
    "logstash": { 
     "template": "logstash-*", 
     "settings": { 
      "index.number_of_replicas": "0", 
      "index.refresh_interval": "5s", 
      "index.number_of_shards": "1" 
     } 
    } 
} 

{ 
    "template": "logstash-*", 
    "settings" : { 
     "index.number_of_shards" : 1, 
     "index.number_of_replicas" : 0, 
    } 
} 

回答

1

OK,幾個小時後,我發現以下幾點:

  1. 用於覆蓋Logstash模板最主要的原因是,我不得不與條件選擇Logstash輸出第二節Elasticsearch部分(if/else語句)。即使我在第一個(「if」)部分正確配置了索引設置,只要Logstash遇到滿足其他(「else」)部分的日誌,它就會使用覆蓋自定義模板的默認模板。

  2. 「manage_template」選項很重要。對於引用自定義模板設置文件的配置塊,必須設置爲「true」,對於不應覆蓋自定義Logstash模板的塊,必須設置爲「false」。

1

您在您的Logstash配置elasticsearch {}元素,你需要添加manage_template => false如果你想管理logstash之外的模板。

+0

我已經添加了以下行配置: manage_template =>假 template_overwrite =>真 但我仍然得到碎片後,我刪除索引,然後重新啓動Logstash的默認號碼。 – 2014-09-03 13:44:46

+0

謝謝。試過了。神祕。仍然重置。我還發布了我的JSON文件的內容。 – 2014-09-03 14:39:07

+0

你刪除了logstash- *索引? - 即'curl localhost:9200/_cat/shards | grep logstash'顯示沒有索引/分片?因爲您無法更改已創建索引中的分片數量。 – Alcanzar 2014-09-03 15:03:58