Documentation lacks info on template migration from 5.x to 6.0.0-beta1
- Dominant language
- Java
- Stars
- 14.9k
- Forks
- 3.5k
- Avg merge
- 19h 14m
- Merged PRs (30d)
- 63
Description
- Version: 6.0.0-beta1
- Operating System: Ubuntu 16.04.2 LTS
Hi,
I'm currently trying out the 6.0.0-beta1 with a logstash configuration that works fine on 5.x and encountered a problem. The problem is that logstash fails to install a template provided via the logstash config file. The reason to why it fails seems to be that the template provided by logstash 5.x isn't valid on ES 6.0.0-beta1 (`[include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated.`). The provided template is a slightly modified version of a standard logstash 5.x template.
This is what the elasticsearch output section in the logstash config file looks like:
```
elasticsearch {
hosts => "elasticsearch:9200"
index => "logstash-egmlogs-%{+YYYY.MM.dd}"
template => "/share/logstash_template.json"
template_overwrite => true
}
```
`logstash_template.json` (with settings changes and added keyword to message field) :
```
{
"template": "logstash-*",
"settings": {
"number_of_shards" : "2",
"number_of_replicas" : "0",
"index": {
"refresh_interval": "5s"
}
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"match_mapping_type": "string"
}
},
{
"string_fields": {
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"match_mapping_type": "string",
"match": "*"
}
}
],
"_all": {
"norms": false,
"enabled": true
},
"properties": {
"@timestamp": {
"include_in_all": false,
"type": "date"
},
"geoip": {
"dynamic": true,
"properties": {
"ip": {
"type": "ip"
},
"latitude": {
"type": "half_float"
},
"location": {
"type": "geo_point"
},
"longitude": {
"type": "half_float"
}
}
},
"@version": {
"include_in_all": false,
"type": "keyword"
}
}
}
},
"aliases": {}
}
```
Below are the errors from logstash and elasticsearch that are logged when the template is to be installed.
Logstash 6.0.0-beta1:
```
[2017-08-21T08:57:08,910][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=>"/share/logstash_template.json"}
[2017-08-21T08:57:08,994][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "settings"=>{"number_of_shards"=>"2", "number_of_replicas"=>"0", "index"=>{"refresh_interval"=>"5s"}}, "mappings"=>{"_defaul t_"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "mapping"=>{"norms"=>false, "type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword"}}}, "match_mapping_type"=>"string"}}, {"string_fields"=>{"mapping"=>{"norms"=>false, "type"=>"text", "fields" =>{"keyword"=>{"type"=>"keyword"}}}, "match_mapping_type"=>"string", "match"=>"*"}}], "_all"=>{"norms"=>false, "enabled"=>true}, "properties"=>{"@timestamp"=>{"include_in_all"=>false, "type"=>"date"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, " latitude"=>{"type"=>"half_float"}, "location"=>{"type"=>"geo_point"}, "longitude"=>{"type"=>"half_float"}}}, "@version"=>{"include_in_all"=>false, "type"=>"keyword"}}}}, "aliases"=>{}}}
[2017-08-21T08:57:09,013][INFO ][logstash.outputs.elasticsearch] Installing elasticsearch template to _template/logstash
[2017-08-21T08:57:09,192][ERROR][logstash.outputs.elasticsearch] Failed to install template. {:message=>"Got response code '400' contacting Elasticsearch at URL 'http://elasticsearch:9200/_template/logstash'", :class=>"LogStash::Outputs::ElasticSearch::HttpClient::P ool::BadResponseCodeError", :backtrace=>["/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb:80:in `perform_request'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logsta sh-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/pool.rb:269:in `perform_request_to_url'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/pool.rb:257: in `block in perform_request'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/pool.rb:347:in `with_connection'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsear ch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/pool.rb:256:in `perform_request'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client/pool.rb:264:in `block in put'", "/logsta sh/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/http_client.rb:332:in `template_put'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch /http_client.rb:82:in `template_install'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/template_manager.rb:29:in `install'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticse arch-8.0.0-java/lib/logstash/outputs/elasticsearch/template_manager.rb:9:in `install_template'", "/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/common.rb:56:in `install_template'", "/logstash/ven dor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-8.0.0-java/lib/logstash/outputs/elasticsearch/common.rb:29:in `register'", "/logstash/logstash-core/lib/logstash/output_delegator_strategies/shared.rb:9:in `register'", "/logstash/logstash-core/lib/logstash/o utput_delegator.rb:41:in `register'", "/logstash/logstash-core/lib/logstash/pipeline.rb:376:in `register_plugin'", "/logstash/logstash-core/lib/logstash/pipeline.rb:387:in `block in register_plugins'", "org/jruby/RubyArray.java:1734:in `each'", "/logstash/logstash-c ore/lib/logstash/pipeline.rb:387:in `register_plugins'", "/logstash/logstash-core/lib/logstash/pipeline.rb:396:in `start_workers'", "/logstash/logstash-core/lib/logstash/pipeline.rb:321:in `run'", "/logstash/logstash-core/lib/logstash/pipeline.rb:281:in `block in st art'"]}
[2017-08-21T09:03:55,330][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}}
```
Elasticsearch 6.0.0-beta1:
```
[2017-08-21T08:57:09,176][DEBUG][o.e.a.a.i.t.p.TransportPutIndexTemplateAction] [dA4zuLB] failed to put template [logstash]
org.elasticsearch.index.mapper.MapperParsingException: Failed to parse mapping [_default_]: [include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated. As a replacement, you can use an [copy_to] on mapping fields to create your own catch all field.
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:305) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:267) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService.validateAndAddTemplate(MetaDataIndexTemplateService.java:234) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService.access$200(MetaDataIndexTemplateService.java:63) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.metadata.MetaDataIndexTemplateService$2.execute(MetaDataIndexTemplateService.java:172) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:640) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:270) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:195) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:130) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:247) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:210) [elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_144]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
Caused by: org.elasticsearch.index.mapper.MapperParsingException: [include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated. As a replacement, you can use an [copy_to] on mapping fields to create your own catch all field.
at org.elasticsearch.index.mapper.TypeParsers.parseField(TypeParsers.java:251) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.DateFieldMapper$TypeParser.parse(DateFieldMapper.java:142) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:278) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.ObjectMapper$TypeParser.parseObjectOrDocumentTypeProperties(ObjectMapper.java:199) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.RootObjectMapper$TypeParser.parse(RootObjectMapper.java:99) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:111) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:91) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:77) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:303) ~[elasticsearch-6.0.0-beta1.jar:6.0.0-beta1]
... 17 more
```
After reading the ES log message `[include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated. As a replacement, you can use an [copy_to] on mapping fields to create your own catch all field.`, I modified the template to look like this and could successfully install the template:
```
{
"template": "logstash-*",
"settings": {
"number_of_shards" : "2",
"number_of_replicas" : "0",
"index": {
"refresh_interval": "5s"
}
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"match_mapping_type": "string"
}
},
{
"string_fields": {
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"match_mapping_type": "string",
"match": "*"
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"geoip": {
"dynamic": true,
"properties": {
"ip": {
"type": "ip"
},
"latitude": {
"type": "half_float"
},
"location": {
"type": "geo_point"
},
"longitude": {
"type": "half_float"
}
}
},
"@version": {
"type": "keyword"
}
}
}
},
"aliases": {}
}
```
This is the diff:
```
@@ -41,13 +41,8 @@
}
}
],
- "_all": {
- "norms": false,
- "enabled": true
- },
"properties": {
"@timestamp": {
- "include_in_all": false,
"type": "date"
},
"geoip": {
@@ -68,7 +63,6 @@
}
},
"@version": {
- "include_in_all": false,
"type": "keyword"
}
}
```
It would have been useful if information on how to update templates was documented in the release notes :)
Contributor guide
Assessment
This issue has not been assessed yet.