Logstash会覆盖Elasticsearch索引模板

时间:2014-09-03 13:07:15

标签: templates elasticsearch logstash

我使用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,
    }
}

2 个答案:

答案 0 :(得分:1)

在Logstash配置中的elasticsearch {}元素上,如果要在logstash之外管理模板,则需要添加manage_template => false

答案 1 :(得分:1)

好的,几个小时后我发现了以下内容:

  1. 重写Logstash模板的主要原因是我在Logstash输出部分中有两个带有条件选择(if / else)的Elasticsearch部分。即使我在第一个(“if”)部分中正确配置了索引设置,但只要Logstash遇到满足其他(“else”)部分的日志,它就会使用覆盖自定义模板的默认模板。

  2. “manage_template”选项很重要。对于引用自定义模板设置文件的配置块,必须将其设置为“true”,对于不应覆盖自定义Logstash模板的块,必须设置为“false”。