2014-11-03 136 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不是用于模板管理的好工具。