我使用Logstash将日志数据发送到Elasticsearch数据库。我想将分片数从3更改为1,并通过ES REST API发出以下命令:
PUT server_name/_template/logstash
{
"template": "logstash",
"settings": {
"index.number_of_replicas": "0",
"index.refresh_interval": "5s",
"index.number_of_shards": "1"
}
}
服务器响应OK,如果我发出GET _template / logstash,我可以看到分片数现在设置为1.
然后我使用输出集启动logstash以将日志发送到Elasticsearch。没有与模板相关的设置。发送日志数据后,我看到分片数量已恢复为默认值(3)。
我甚至尝试通过引用Logstash配置文件中的模板来覆盖它。不,无论我指定什么设置都会被重置。看起来Logstash继续用一些默认值覆盖Elasticsearch索引设置,我无法弄清楚如何禁用它。
更新。我已将以下行添加到Logstash配置文件中,但它没有帮助:
manage_template => false
template_overwrite => true
还尝试将template_overwrite设置为false。我尝试了两种不同的方法来设置JSON文件中的分片数量:
{
"logstash": {
"template": "logstash-*",
"settings": {
"index.number_of_replicas": "0",
"index.refresh_interval": "5s",
"index.number_of_shards": "1"
}
}
}
和
{
"template": "logstash-*",
"settings" : {
"index.number_of_shards" : 1,
"index.number_of_replicas" : 0,
}
}
答案 0 :(得分:1)
在Logstash配置中的elasticsearch {}
元素上,如果要在logstash之外管理模板,则需要添加manage_template => false
。
答案 1 :(得分:1)
好的,几个小时后我发现了以下内容:
重写Logstash模板的主要原因是我在Logstash输出部分中有两个带有条件选择(if / else)的Elasticsearch部分。即使我在第一个(“if”)部分中正确配置了索引设置,但只要Logstash遇到满足其他(“else”)部分的日志,它就会使用覆盖自定义模板的默认模板。
“manage_template”选项很重要。对于引用自定义模板设置文件的配置块,必须将其设置为“true”,对于不应覆盖自定义Logstash模板的块,必须设置为“false”。