本日も乙

ただの自己満足な備忘録。

Elasticsearchの古いインデックスを削除するBashスクリプトを書いた

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などのオプションはありません。
ご使用は各自の責任でお願いします。