我们已从AWS Elasticsearch 2.3移至5.1,发现旧的curator 3命令不再能删除30天以上的索引。我们旧的命令如下所示:
00 00 * * 1 /bin/curator --host elasticsearch.production.domain.aws --port 80 delete indices --older-than 30 --time-unit days --timestring %Y.%m.%d --exclude .kibana
为了支持ES 5.1,需要迁移到Curator 4.2.6,但是,使用提供的示例from the elasticsearch page时,我们发现收到错误:
2017-02-15 11:46:18,874 INFO Preparing Action ID: 1, "delete_indices"
2017-02-15 11:46:18,884 INFO Trying Action ID: 1, "delete_indices": Delete indices older than 45 days (based on index name), for logstash- prefixed indices. Ignore the error if the filter does not result in an actionable list of indices (ignore_empty_list) and exit cleanly.
2017-02-15 11:46:18,897 ERROR Failed to complete action: delete_indices. <class 'KeyError'>: 'settings'
迁移后,其他人在该配置上是否成功?
我单独定义了curator.yaml配置,我认为它是正确的:
client:
hosts:
- elasticsearch.production.domain.aws
port: 80
url_prefix:
use_ssl: False
certificate:
client_cert:
client_key:
ssl_no_validate: False
http_auth:
timeout: 30
master_only: False
最佳答案
TL; DR: AWS ES仍然不支持Curator进行必要的API调用(虽然可以,但是不返回必要的数据)。
尽管AWS ES似乎确实添加了必要的/_cluster/state
端点(这就是Curator 4不支持AWS ES 2.3的原因),但他们似乎已经从该端点中省略了一些必要的数据(这就是获得<class 'KeyError'>: 'settings'
的部分)。缺少JSON响应中的settings
子对象,因此Curator无法完成其任务。
在Curator中已经存在一个未解决的问题:https://github.com/elastic/curator/issues/880,尽管我认为Curator不能做任何事情来克服这个问题。