我最近使用redis 2.8.24,Elasticsearch 1.2.2从(logstash 1.4.1 / 1.4.2)升级了我的ELK堆栈(logstash 2.3.4使用redis 3.2.3,Elasticsearch 2.3.5和Kibana 4.5.4)和Kibana 3.1.1)。升级进行得很顺利,但升级后我有一些字段有冲突类型。此特定字段由logstash动态创建,因此Elasticsearch中没有整体映射。我花了相当多的时间搜索如何改变它。每篇在线文章都说我不能简单地改变现有数据的字段类型。我引用的许多文章都需要重新索引,但未能解释如何。以下是我更改类型和重新索引的确切步骤。
从需要更改字段类型的当前索引获取映射:
curl -XGET http://localhost:9200/logstash-2016.05.30/_mapping?pretty=1 > logstash-2016.05.30
编辑logstash-2016.05.30文件,删除文件中的第二行(索引名称)和第二行(花括号)。如果不这样做,将不会更新映射。我想如果您将索引名称编辑为新名称它会起作用,但我没有尝试过(我应该尝试过)。
编辑logstash-2016.05.30文件并更改类型(即long为string或string为long)。您可以使用类似字段使用的确切定义。
"http_status" : {
"type" : "string",
"norms" : {
"enabled" : false
},
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed",
"ignore_above" : 256
}
}
},
更改为:
"http_status" : {
"type" : "long"
},
接下来创建新索引(追加_new或任何你想要的东西)
curl -XPUT http://localhost:9200/logstash-2016.05.30_new -d @logstash-2016.05.30
仔细检查映射是否已正确创建
curl -XGET http://localhost:9200/logstash-2016.05.30_new/?pretty
使用以下内容重新编制索引:
curl -XPOST http://localhost:9200/_reindex -d '{
"source": {
"index" : "logstash-2016.05.30"
},
"dest" : {
"index" : "logstash-2016.05.30_new"
}
}'
计算两个索引中的条目(应该相同)
curl -XGET http://localhost:9200/logstash-2016.05.30/_count
curl -XGET http://localhost:9200/logstash-2016.05.30_new/_count
一旦满意,重建索引就成功删除旧索引
curl -XDELETE http://localhost:9200/logstash-2016.05.30
创建别名,以便仍然可以使用旧索引名称
curl -XPOST http://localhost:9200/_aliases -d '{
"actions": [
{ "add": {
"alias": "logstash-2016.05.30",
"index": "logstash-2016.05.30_new"
}}
]
}'
最后,导航到Kibana并选择设置和索引模式。单击重新加载图标以刷新字段列表。应删除所有冲突。
遗憾的是,这并不是一个真正的问题,除非你觉得这可以用另一种方式来做,否则这就是这样做的问题。
答案 0 :(得分:0)
对于Elasticsearch 6,需要进行一些小的更改。否则,请严格按照所有说明进行操作。
要获取映射,请使用pretty=true
而不是pretty=1
:
curl -XGET http://localhost:9200/logstash-2016.05.30/_mapping?pretty=true > logstash-2016.05.30
对于所有XPUT / XPOST请求,现在必须将内容类型设置为application / json。
curl -XPUT http://localhost:9200/logstash-2016.05.30_new \
-H 'Content-Type: application/json' -d @logstash-2016.05.30