转载请注明原作链接:
http://blog.csdn.net/hereiskxm/article/details/47423715
Marvel几乎是所有Elasticsearch用户的标配。以前我常用bigdesk来做ES集群的监控,直到项目需要上线时,方感觉到marvel才是想要的:它可以把观测值和重要事件记录下来!当出问题时打开bigdesk已经迟了,因为我们往往想知道过去的两小时发生了什么造成现在的情况。marvel则不同,它时刻保留观测数据。
Marvel保留观测数据的代价是,它默认每天会新建一个index,命名规律像是这样:.marvel-2015-08-09。marvel自建的索引一天可以产生大概500M的数据,而且将会越来越多,占的容量也将越来越大。有没有什么办法能让它自动过期?比如说只保留最近三天的观测数据,其他的都抛弃掉。
果然这样想的不只我一个人,这位deepakas同学提了类似的问题:
http://elasticsearch-users.115913.n3.nabble.com/Marvel-Indices-taking-lot-of-space-Can-we-specify-automatic-delete-of-marvel-indice-td4055729.html
回答里Ivan Brusic和Boaz Leskes提到的curator解决了题主的问题,我们不妨参照这个做一个解决方案。
curator是什么?它是一个命令,可以帮助你管理你在Elasticsearch中的索引,帮你删除,关闭(close),打开(open)它们。当然这是比较片面的说法,更完整的命令说明见:
https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html
github地址:https://github.com/elastic/curator
1. 安装一个curator
从github上下载一个curator-master:https://codeload.github.com/elastic/curator/zip/master
放置在服务器上某个目录下,而后解压并安装:
cd %curator-home%
python setup.py install
如果出现
Finished processing dependencies for elasticsearch-curator==3.3.0.dev4
字样说明安装成功了,你拥有了一个curator命令。
注:官方推荐使用pip安装,考虑到我本地用pip并不方便,使用以上安装形式。已安装pip命令的同学可以选择官方的安装方法。
2. 删除过期的marvel索引
根据curator的文档,我写了以下语句来执行删除操作:
curator delete indices --index .marvel- --older-than 3 --time-unit days --timestring %Y.%m.%d --dry-run
索引名是.marvel-开头的,时间格式是%Y.%m.%d,删除三天前的索引。并使用调试模式(--dry-run),只模拟删除,并不真的做操作,这样方便我们调试。
执行的结果:
2015-08-11 12:09:33,937 INFO Job starting: delete indices
2015-08-11 12:09:33,948 INFO Pruning Kibana-related indices to prevent accidental deletion.
2015-08-11 12:09:33,948 WARNING .marvel- not found!
2015-08-11 12:09:33,948 INFO DRY RUN MODE. No changes will be made.
2015-08-11 12:09:33,959 INFO DRY RUN: delete: .marvel-2015.08.10
可以看到它模拟删除了.marvel-2015.08.10索引。
如果换成正式的语句,去掉--dry-run即可。若ES是需要验证访问的,可以使用http_auth选项:
curator --host 127.0.0.1 --http_auth {username}:{password} delete indices --index .marvel- --older-than 1 --time-unit days --timestring %Y.%m.%d
执行的结果:
2015-08-11 12:48:16,316 INFO Job starting: delete indices
2015-08-11 12:48:16,327 INFO Pruning Kibana-related indices to prevent accidental deletion.
2015-08-11 12:48:16,327 WARNING .marvel- not found!
2015-08-11 12:48:16,327 INFO Deleting indices as a batch operation:
2015-08-11 12:48:16,327 INFO ---deleting index .marvel-2015.08.10
2015-08-11 12:48:16,670 INFO Job completed successfully.
3. 设成定时任务
现在有了删除语句,我们只要把它设置成每天定时跑,就可以实现自动清理过期marvel数据了。
首先新建一个shell脚本:
#!/bin/sh
#
#always keep nearly two days marvel indics in cluster.
#
#author:kexm
#date:2015-08-11
#
curator --host 10.64.2.51 --http_auth username:password delete indices --index .marvel- --older-than 2 --time-unit days --timestring %Y.%m.%d
echo "delete successed!"
然后将其设置为每日定时执行:
crontab -e
增加一行:
0 2 * * * /bin/sh {your-path}/del-Marvel-Index.sh>>{your-path}/del-Marvel-Index.log 2>&1
每天凌晨两点执行curator语句,并将其执行情况输出到日志。
验证定时任务是否新建:
crontab -l
看到自己的定时任务则可。
假如shell脚本运行的时候报错 curator:conmand not found,则在定时任务(crontab -e)的文件头部增加:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
其中包含你的curator命令所在位置即可。
如果其他的解决方案欢迎交流~
也希望marvel可以在未来的版本中增加对数据保留时间的设置,避免用户们使用外部指令曲线救国的方式来解决问题。