如何在Elasticsearch和logstash中添加动态主机

时间:2016-08-29 09:55:27

标签: elasticsearch output logstash-configuration

我有原型为我工作,设备发送日志,然后logstash解析它并放入elasticsearch。

Logstash输出代码: -

    output{
    if [type] == "json" {
    elasticsearch {
     hosts => ["host1:9200","host2:9200","host3:9200"]
     index => "index-metrics-%{+xxxx.ww}"
    }
  }

} 

现在我的问题是:

我将制作此解决方案。为简单起见,假设我有一个群集,我现在拥有该群集中的5个节点。

所以我知道我可以在elasticsearch输出插件中提供5个节点IP / Hostname的数组,然后它将循环分发数据。

如何避免将所有节点IP /主机名放入logstash配置文件中。

随着系统投入生产,我不想手动进入每个logstash实例并更新这些主机。

在这种情况下应该遵循哪些最佳做法?

我的要求是:

我想运行我的ES群集,我想随时添加/删除/更新任意数量的节点。我需要所有的logstash实例发送数据,而不管ES端的更改。

感谢。

1 个答案:

答案 0 :(得分:0)

如果要添加/删除/更新,则需要在服务启动之前运行sed或某种字符串替换。 Logstash配置是"编译"并且不能改变那种方式。

hosts => [$HOSTS] ... $ HOSTS="\"host1:9200\",\"host2:9200\"" $ sed "s/\$HOSTS/$HOSTS/g" $config

您的另一个选择是为动态部分使用环境变量,但这不允许您使用动态数量的主机。