5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elasticsearch Service (6.0/6.2) に取り込んだログ(INDEX)をCuratorで削除するメモ

Last updated at Posted at 2018-04-09

2020/01/07 追記:

Python 3.8 / Elasticsearch Service 6.8 対応版アップデート記事はこちらです。


Elasticsearch Service (6.0/6.2) 小ネタメモシリーズは、100番煎じ?の**「Curator on Lambdaでログ(INDEX)削除」**でシメたいと思います。

で取り込んだログ(INDEX)を、一定期間経過後に削除するものです。

※当然ですが、Elasticsearch Service が起動していて、既に削除すべきログ(INDEX)が存在することが前提です。

手順

1. IAM Role の確認/作成

すでに IAM Role が作成されていれば問題ないのですが、なければ作成します。

2. AWS Lambda ファンクションの作成

Lambda にアップロードする .zip ファイルの作成

elasticsearch-curatorが必要なので、今回も .zip ファイルとしてあらかじめ用意します。elasticsearch-curatorをインストールしたディレクトリに Lambda ファンクションの内容を記述して.zip化します。

なお、Elasticsearch Service (6.0/6.2) に対応するのは Curator 5 です。

今回は Curator 5.5.2 を使いました。

実行例
$ mkdir ~/logrotate
$ pip2 install elasticsearch-curator -t ~/logrotate/
※環境によって「pip」「pip2」など
$ cd ~/logrotate
$ vi logrotate.py
※Lambda ファンクションの内容を記述して保存
$ zip -r ../logrotate.zip *
Lambdaファンクションの内容
import boto3
import curator
import os
from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

es_host = os.environ["ES_HOST"]
es_index = os.environ["ES_INDEX_PREFIX"] + "-"
rotation_period = int(os.environ["ROTATION_PERIOD"])
region = os.environ["AWS_REGION"]

def lambda_handler(event, context):
    awsauth = AWS4Auth(
        os.environ["AWS_ACCESS_KEY_ID"],
        os.environ["AWS_SECRET_ACCESS_KEY"],
        region,
        "es",
        session_token=os.environ["AWS_SESSION_TOKEN"]
    )

    es = Elasticsearch(
        hosts=[{"host": es_host, "port": 443}],
        http_auth=awsauth,
        use_ssl=True,
        verify_certs=True,
        connection_class=RequestsHttpConnection
    )
    runCurator(es)


def runCurator(es):
    ilo = curator.IndexList(es)
    ilo.filter_by_regex(kind="prefix", value=es_index)
    ilo.filter_by_age(source="name", direction="older", timestring="%Y%m%d", unit="days", unit_count=rotation_period)
    delete_indices = curator.DeleteIndices(ilo)
    delete_indices.do_action()

Lambda ファンクションの作成

先ほどの.zipファイルをアップロードする形で作成します。
curator-log-rotate-1.png
ランタイムは Python 2.7、ハンドラは【アップロードしたファイル名】.lambda_handlerを指定します。

環境変数の設定は以下の通りです。
curator-log-rotate-2.png
ES_INDEX_PREFIXで削除対象のログ(INDEX)のプレフィックス、ROTATION_PERIODで削除するまでの期間(日数)を指定します。

トリガーは「CloudWatch Events」で cron 式を使って、00:00 UTC を過ぎたあたりの時刻に、毎日実行するよう指定すると良いでしょう(画面は省略)。

実行ロールは最初に確認/作成したものを使います。タイムアウトの時間も延長しておきます。
curator-log-rotate-3.png

ネットワークの設定は環境に合わせます。VPC を使う場合は、先の記事を参考にしてください。

補足

まだ削除対象のログ(INDEX)がない場合はエラーが発生しますが、異常ではありません。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?