Logstash动态分配模板
问题描述:
我已阅读,也可以动态指定名称这样的指标:Logstash动态分配模板
elasticsearch {
cluster => "logstash"
index => "logstash-%{clientid}-%{+YYYY.MM.dd}"
}
我想知道是,如果它可以分配模板动态,以及:
elasticsearch {
cluster => "logstash"
template => "/etc/logstash/conf.d/%{clientid}-template.json"
}
变量%{clientid}来自哪里呢?
谢谢!
答
经过一些测试和其他用户的反馈,感谢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"
}
}
答
全面披露:我在弹性
一个Logstash开发人员,因为模板上传一次,在Logstash初始化无法动态分配的模板。没有交通流量,确定性变量完成不会发生。由于在初始化过程中没有交通流量,因此%{clientid}
中没有任何内容可以“填空”。
记住Elasticsearch索引模板仅在创建新索引时才使用,所以每次文档到达Logstash中的Elasticsearch输出块时都不会上传模板 - 您能想象如何如果Logstash必须这么做会慢得多?如果您打算拥有多个模板,那么在将数据发送到Elasticsearch之前,需要将其上传到Elasticsearch。你可以用你自己的脚本使用curl和Elasticsearch API调用来做到这一点。这也允许您更新模板,而无需重新启动Logstash。您可以在索引翻转之前的任何时候运行脚本,并且在创建新索引时,他们将拥有新的模板设置。
Logstash可以将数据发送到动态配置的索引名称,就像上面一样。如果不存在模板,Elasticsearch将创建一个最佳猜测映射,而不是您想要的。模板可以并且应该完全独立于Logstash。添加了此功能,为全新用户提供了改进的开箱即用体验。对于高级用例,默认模板不太理想,如果您有多个索引模板,则Logstash不是用于模板管理的好工具。
随着logstash 1.4.1,你不能这样做。模板必须是一个路径! – 2014-11-04 05:38:31
所以没有办法做动态模板? – Bradox 2014-11-05 01:59:50
是的!迄今为止,您无法做到这一点 – 2014-11-05 02:25:40