2014-11-03 128 views
0

我已閱讀,也可以動態指定名稱這樣的指標:Logstash動態分配模板

elasticsearch { 
      cluster => "logstash" 
      index => "logstash-%{clientid}-%{+YYYY.MM.dd}" 
    } 

我想知道是,如果它可以分配模板動態,以及:

elasticsearch { 
      cluster => "logstash" 
      template => "/etc/logstash/conf.d/%{clientid}-template.json" 
    } 

變量%{clientid}來自哪裏呢?

謝謝!

+0

隨着logstash 1.4.1,你不能這樣做。模板必須是一個路徑! – 2014-11-04 05:38:31

+0

所以沒有辦法做動態模板? – Bradox 2014-11-05 01:59:50

+0

是的!迄今爲止,您無法做到這一點 – 2014-11-05 02:25:40

回答

0

經過一些測試和其他用戶的反饋,感謝Ben Lim,似乎這是不可能做到目前爲止。 最接近的事是做這樣的事情:

if [type] == "redis-input" { 
      elasticsearch { 
        cluster => "logstash" 
        index => "%{type}-logstash-%{+YYYY.MM.dd}" 
        template => "/etc/logstash/conf.d/elasticsearch-template.json" 
        template_name => "redis" 
      } 
    } else if [type] == "syslog" { 
      elasticsearch { 
        cluster => "logstash" 
        index => "%{type}-logstash-%{+YYYY.MM.dd}" 
        template => "/etc/logstash/conf.d/syslog-template.json" 
        template_name => "syslog" 
      } 
    } 
1

全面披露:我在彈性

一個Logstash開發人員,因爲模板上傳一次,在Logstash初始化無法動態分配的模板。沒有交通流量,確定性變量完成不會發生。由於在初始化過程中沒有交通流量,因此%{clientid}中沒有任何內容可以「填空」。

記住Elasticsearch索引模板僅在創建新索引時才使用,所以每次文檔到達Logstash中的Elasticsearch輸出塊時都不會上傳模板 - 您能想象如何如果Logstash必須這麼做會慢得多?如果您打算擁有多個模板,那麼在將數據發送到Elasticsearch之前,需要將其上傳到Elasticsearch。你可以用你自己的腳本使用curl和Elasticsearch API調用來做到這一點。這也允許您更新模板,而無需重新啓動Logstash。您可以在索引翻轉之前的任何時候運行腳本,並且在創建新索引時,他們將擁有新的模板設置。

Logstash可以將數據發送到動態配置的索引名稱,就像上面一樣。如果不存在模板,Elasticsearch將創建一個最佳猜測映射,而不是您想要的。模板可以並且應該完全獨立於Logstash。添加了此功能,爲全新用戶提供了改進的開箱即用體驗。對於高級用例,默認模板不太理想,如果您有多個索引模板,則Logstash不是用於模板管理的好工具。