以前の記事で、トラフィックキャプチャ・ソフトウェアのMolochを紹介した。導入から1か月半が過ぎてまずまず問題なく動いていたのだが、あるパーティションが90%を超えたぞと警告が出たので調べてみたら、Elasticsearchのデータディレクトリが肥大化して溢れていた。よく考えてみたら何の手立ても打っていないので、データが溜まれば溢れるに決まっている。そこでどうやって古いデータを消せばいいのか、慌てて調べた。その結果あんまりきれいにまとまったページがないようなので、個人的なメモを兼ねてブログ化しておく。
メンテナンスツールCurator
Elasticsearchが溜め込んだデータのメンテナンスには、Curatorというツールが役に立つ。
CentOSでは、パッケージはPythonのPIPになっているので、適切な手段でPIPをインストールしておき、こんな感じでcuratorをインストールする。
pip install elasticsearch-curator
次にconfigファイルを書く。デフォルトは~/.curator/curator.yml
なので、素直にその名前で用意するのがよい。
mkdir ~/.curator
vi ~/.curator/curator.yml
本家サンプルに従って適当に書いておく。こんな感じ。
---
client:
hosts:
- 127.0.0.1
port: 9200
url_prefix:
use_ssl: False
certificate:
client_cert:
client_key:
ssl_no_validate: False
http_auth:
timeout: 30
master_only: False
logging:
loglevel: INFO
logfile:
logformat: default
blacklist: ['elasticsearch', 'urllib3']
もしElasticsearchにパスワード認証をかけている場合、http_auth:
をこんな風にする。
http_auth: "USER_NAME:PASSWORD_STRING"
その他、書き方についてはリファレンスマニュアルのこちらのページを参照してほしい。設定が成功していれば、次のコマンドで確認できる。
[root@xorn ~]# curator_cli show_indices
2020-06-26 11:36:03,910 INFO Instantiating client object
2020-06-26 11:36:03,911 INFO Testing client connectivity
2020-06-26 11:36:03,922 INFO Successfully created Elasticsearch client object with provided settings
dstats_v4
fields_v3
files_v6
history_v1-20w18
history_v1-20w19
history_v1-20w20
history_v1-20w21
history_v1-20w22
history_v1-20w23
history_v1-20w25
hunts_v2
lookups_v1
queries_v3
sequence_v3
sessions2-200528
sessions2-200529
sessions2-200530
:
:
:
失敗した場合、何かがおかしいのでconfigファイルを見直す。
フィルタの書き方とデータの削除
Curatorにはいろいろな機能があるが、ここでは一定の期間を過ぎたデータを削除する手順を示すだけに留める。本家マニュアルではさまざまな利用例をサンプルで示してくれているので、自分の環境に合わせて書き直すだけで簡単に実行できる。
Molochの場合、上述のようにデータは「sessions2-200528」のような名前で格納されている。prefixとなる「sessions2-」に、シリアル番号が続ているような構造だ。残念ながらlogstashのようにファイル名と日付の構造ではない。そこでcreation_dateのサンプルを流用して、こんなaction fileを用意する。
---
actions:
1:
action: delete_indices
description: "Delete indices"
options:
timeout_override: 30
continue_if_exception: False
filters:
- filtertype: pattern
kind: prefix
value: sessions2-
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 30
末尾のunit_count
を変更すれば、何日分を残すかを調節できる。ここでは作成日が30日より古いファイルを削除するように指定している。
これをコマンドラインから実行する。
curator delete.yml
データ量にもよるが、割にさっくりと完了する。後は忘れないように、cronにいれておけばよいだろう。