我正在尝试建立一组运行ELK堆栈各个部分的节点。特别是,我有一组运行Elasticsearch的系统,我想填写我的logstash配置文件,以便它知道哪些系统上有ES。
我可以在logstash配置中看到类似的内容(显然未经测试):
output {
elasticsearch {
hosts => [
<%
@es_hosts.each do |host|
"#{host}",
end
-%>
]
}
}
但我无法弄清楚如何收集运行elasticsearch的系统的主机名。我有一个应用RabbitMQ和ES的模块,它已经导出了一些资源,但是看起来它只需要nodenames来合并到一个列表中。
--------编辑以下--------
在检查了我使用的一些PF模块之后,我偶然发现了数据,并认为它可能是候选人。这是我所做的,发布在这里,因为它没有按照我预期的方式工作。
在我的弹性搜索节点上(有几个):
@@datacat_fragment { "${::hostname} in hosts":
tag => ['elasticsearch_cluster'],
target => '/etc/logstash/conf.d/master.conf',
data => {
host => ["${::hostname}" ],
}
}
然后,在需要输出到这些ES节点的logstash节点上:
Datacat_fragment<| tag == 'elasticsearch_cluster' |>
datacat { '/etc/lostash/conf.d/master.conf':
template => "${module_name}/logstash-master.conf.erb",
}
最后,模板本身:
input { [...snip...] }
filter {}
output {
elasticsearch {
<% @data.keys.sort.each do |host| %>
hosts = [
<%= @data[host.sort.join(',') %>
]
}
}
可悲的是,所有这一切的结果都是
input { [...snip...] }
filter {}
output {
elasticsearch {
}
}
所以目前,看起来导出的资源没有按预期实例化,我看不出原因。如果我添加一个datacat_fragment以相同的方式定义,但在logstash清单中是本地的,那么数据就会被插入到.conf文件中。它只是ES节点中被忽略的那些。
更复杂的是,输入部分需要插入一个基于接收文件的系统的值。因此,有一部分需要像传统模板一样运行,另一部分需要从多个源插入数据。 Datacat看起来很有希望,但还有另外一种方法吗?以某种方式使用内联模板进行Concat?