公司一直在用Amazon AWS的ElasticSearch service, 最近因为AWS提供从5.6到6.5的升级,就在上周日尝试着升级了一下。结果升级之后产生了一堆问题,一边在AWS support开ticket一边自己研究怎么修复。最终幸运的修复了一些,下面介绍一下问题和心得
1. ES 6.0之后不再支持string type:
这里的type指的是index和indice里面的属性type,我所用的之前是下面这样的格式
"request" : {
"type" : "string",
"fields" : {
"raw" : {
"index" : "not_analyzed",
"type" : "string"
}
}
}
升级之后的现象是无法在ES cluster上创建当天的日志indice。后来发现是因为ES从6.0开始不再支持string。于是用Dev Tools将模板升级成下面的样子
"request" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "keyword"
}
}
}
之所以把"index" : "not_analyzed" 也去掉是因为ES6.5也不支持这种属性了……查了下资料好像只支持true和false。一开始type我改的是text,但是如果raw设置为text好像不能用来搜索。现在模板这样设置之后,我们的属性是只能用来进行模糊搜索的,就像下图一样,我用logtype来搜索会搜索出来很多不相干的结果
而如果用了logtype.raw就会精准匹配。我个人猜测这就是keyword的功效,不是很确定,本人也不是专门研究ES的,所以有错误欢迎指正
修改了模板之后,就可以成功创建当天的log indice了,问题1成功解决
2. visualization和dashboard的修改
这个也是猜测的,升级之后我们保存的search、visualization还有dashboard几乎都失效了。当时只能说是崩溃,后来慢慢排查发现问题主要出在search上
visualization是基于search的,然后dashboard又是基于visualization的,所以修复了search就修复了一切
问题是每次进入都提示下图
Saved object is missing
Could not locate that index-pattern (id:****)
click here to re-create it
这个问题其实以前从5.2升级到5.6的时候遇到过一次,当时的解决方案是把index删掉重新创建一个就恢复了
这次删了N次问题依旧
后来慢慢研究发现问题出在search的设置里
设置里有一条是"index": "logstash-*"
尝试了一下贴index的ID进去,问题顺利解决
怀疑是之前的版本可以用index的名字来链接search和index,6.5不支持这样了。当然更可能是底层有哪个API存了index的一些东西,但是因为我没找到,所以只能用这个笨方法来解决了
一键修复的话只需要导出所有的东西,然后find and replace
3 Kibana白屏
此问题至今无解,依旧在等AWS的回复,个人怀疑是升级过程中出现问题,在电话里我给他们的建议是尝试rollback然后重新升级一下试试