如何在 Elasticsearch 和 logstash 中添加动态主机
How to add dynamic hosts in Elasticsearch and logstash
我有原型为我工作,设备发送日志,然后 logstash 解析它并放入 elasticsearch。
Logstash 输出代码 :-
output{
if [type] == "json" {
elasticsearch {
hosts => ["host1:9200","host2:9200","host3:9200"]
index => "index-metrics-%{+xxxx.ww}"
}
}
}
现在我的问题是:
我将制作此解决方案。为简单起见,假设我有一个集群,并且我现在在该集群中有 5 个节点。
所以我知道我可以在 elasticsearch 输出插件中提供 5 个节点 IP / 主机名的数组,然后它会循环分配数据。
如何避免将所有节点 IP/主机名放入 logstash 配置文件。
随着系统投入生产,我不想手动进入每个 logstash 实例并更新这些主机。
在这种情况下应该遵循哪些最佳实践?
我的要求是:
我想 运行 我的 ES 集群,我想随时添加/删除/更新任意数量的节点。我需要我所有的 logstash 实例发送数据,而不考虑 ES 端的变化。
谢谢。
如果您想 add/remove/update 您需要 运行 在服务启动前进行 sed 或某种字符串替换。 Logstash 配置是 "compiled",不能那样改变。
hosts => [$HOSTS]
...
$ HOSTS="\"host1:9200\",\"host2:9200\""
$ sed "s/$HOSTS/$HOSTS/g" $config
您的另一个选择是为动态部分使用环境变量,但这不允许您使用动态数量的主机。
我有原型为我工作,设备发送日志,然后 logstash 解析它并放入 elasticsearch。
Logstash 输出代码 :-
output{
if [type] == "json" {
elasticsearch {
hosts => ["host1:9200","host2:9200","host3:9200"]
index => "index-metrics-%{+xxxx.ww}"
}
}
}
现在我的问题是:
我将制作此解决方案。为简单起见,假设我有一个集群,并且我现在在该集群中有 5 个节点。
所以我知道我可以在 elasticsearch 输出插件中提供 5 个节点 IP / 主机名的数组,然后它会循环分配数据。
如何避免将所有节点 IP/主机名放入 logstash 配置文件。
随着系统投入生产,我不想手动进入每个 logstash 实例并更新这些主机。
在这种情况下应该遵循哪些最佳实践?
我的要求是:
我想 运行 我的 ES 集群,我想随时添加/删除/更新任意数量的节点。我需要我所有的 logstash 实例发送数据,而不考虑 ES 端的变化。
谢谢。
如果您想 add/remove/update 您需要 运行 在服务启动前进行 sed 或某种字符串替换。 Logstash 配置是 "compiled",不能那样改变。
hosts => [$HOSTS]
...
$ HOSTS="\"host1:9200\",\"host2:9200\""
$ sed "s/$HOSTS/$HOSTS/g" $config
您的另一个选择是为动态部分使用环境变量,但这不允许您使用动态数量的主机。