未使用Logstash模板的设置创建Elasticsearch索引

时间:2019-10-24 17:43:15

标签: elasticsearch logstash aws-elasticsearch

我有一个新索引的批量上传,该索引是从logstash发送到ES集群的。因此,我要关闭复制和刷新,直到加载完成,然后在上传完成后重新启用这些值。

我有一个如下配置文件

input {
      stdin { type => stdin }
}
filter {
  csv {
     separator => " "
     columns => [ ...]
  }
}

output {
   amazon_es {
     hosts =>
         ["my-domain.us-east-1.es.amazonaws.com"]
     index => "my-index"
     template => "conf/my-index-template.json"
     template_name => "my-index-template-name"
     region => "us-east-1"
  }
}

模板文件看起来像

{
    "template" : "my-index-template-name",
    "mappings" : {
      ...
    },
    "settings" : {
      "index" : {
        "number_of_shards" : "48",
        "number_of_replicas" : "0",
        "refresh_interval": "-1"
      }
    }
}

当我运行logstash并查看该索引的设置时,此模板都尊重映射,这很好,但是settings部分中的所有内容均被忽略,并且采用默认值(即number_of_shards=5number_of_replicas=1

一些调查记录: 如果从ES本身安装模板后得到模板,我会在模板中看到正确的值(对于mappingssettings)。他们似乎并不适用于索引

此外,如果我获取模板文件的内容并手动创建带有PUT的索引,则它会按照我的预期显示

我的logstash版本是7.3.0,elasticsearch版本是6.7

不确定在这里我在做什么错

1 个答案:

答案 0 :(得分:2)

您的索引名称是my-index,但是映射中的模板设置使用my-index-template-name,它必须是正则表达式或与索引相同的名称。

由于您使用的是Elasticsearch 6.7,因此应在映射中使用index_patterns而不是template

{
    "index_patterns" : ["my-index"],
    "mappings" : {
      ...
    },
    "settings" : {
      "index" : {
        "number_of_shards" : "48",
        "number_of_replicas" : "0",
        "refresh_interval": "-1"
      }
    }
}