td-agent(Fluentd)で集めたログをElasticsearchに格納して、Kibanaで見るということをやっています。
とりあえずということで、200G程度のVPSでログ収集環境を構築したのですが、問題なのはElasticsearchにログを格納し続けるとディスク容量を圧迫していまいます。
そこで、elasticsearch/curator を使って古いインデックスを削除しようとしたのですが、CentOS 6.6だと動いてくれません。
$ curator --version
Traceback (most recent call last):
File "/usr/bin/curator", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: elasticsearch>=1.0.0,<2.0.0
Elasticsearchなどのプラグインをインストールしたり、curatorのバージョンを下げたり上げたりしても動かない。
他にも同じようなスクリプトがあるのですが、curator含めてほとんどがPythonで書かれていて、もうPythonには頼りたくないという気持ちでした。
よく考えたら、古いインデックスを削除するだけなのだから、Bashとかで書いたほうが楽に動かせるんじゃないかと思いました。
最近、ElasticsearchのLogstash形式インデックスをお手軽に削除するワンライナー という記事を見つけましたのでそれをパクって参考にしてBashスクリプトを書いてみました。
gistに上げています。
以下の環境で動作を確認しています。
- CentOS 6.6
- Elasticsearch 1.3.2
使い方は簡単で、第一引数には削除するインデックスのプレフィックス(デフォルトはlogstash-
)、第二引数は削除したい日数を指定するだけです。
# 5日より古いインデックスを削除
$ ./elasticsearch-index-delete.sh logstash- 5
15分ぐらいで書いたスクリプトなので、--dry-run
などのオプションはありません。
ご使用は各自の責任でお願いします。