将通过Elasticsearch Service(6.0/6.2)导入的日志(INDEX),使用Curator进行删除的备忘录

2020年1月7日更新:

以下是Python 3.8 / Elasticsearch Service 6.8兼容版本的更新文章。

    Elasticsearch Service 6.8 に取り込んだログ(INDEX)を Curator で削除するメモ(Lambda Python 3.8 版)

我想通过“Curator on Lambda删除日志(INDEX)”来结束Elasticsearch Service (6.0/6.2) 小贴士系列,这可能是第100个重复的。

    • ALB/CLBのアクセスログをElasticsearch Service (6.0/6.2) に取り込むメモ

 

    • CloudFrontのアクセスログをElasticsearch Service (6.0/6.2) に取り込むメモ(手抜き編)

 

    TABLE形式のAurora(MySQL互換)スロークエリログをElasticsearch Service (6.0/6.2) に取り込みS3に保存するメモ

在一定时间后,删除已导入的日志(索引)。

当然的前提是Elasticsearch Service已经启动,并且存在应该被删除的日志(INDEX)。

操作步骤

确认/创建 IAM 角色

如果已经创建了 IAM 角色,就没有问题,如果没有,则会创建。

    IAM Role の作成(前述の ALB/CLB 取り込みメモより)

创建 AWS Lambda 函数

创建一个.zip文件用于上传到Lambda。

由于需要elasticsearch-curator,因此我们将再次事先准备一个.zip文件。我们将Lambda函数的内容写入已安装elasticsearch-curator的目录并进行.zip压缩。

顺便提一下,Curator 5 是兼容 Elasticsearch Service (6.0/6.2) 的版本。

    Version Compatibility(Curator Reference [5.5] | Elastic)

这次我们使用的是 Curator 5.5.2 版本。

$ mkdir ~/logrotate
$ pip2 install elasticsearch-curator -t ~/logrotate/
※環境によって「pip」「pip2」など
$ cd ~/logrotate
$ vi logrotate.py
※Lambda ファンクションの内容を記述して保存
$ zip -r ../logrotate.zip *
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函数

curator-log-rotate-1.png
curator-log-rotate-2.png

建议使用“CloudWatch Events”进行触发,使用 cron 表达式,在UTC时间00:00之后的时间点,每天进行执行(略去屏幕显示)。

curator-log-rotate-3.png

网络设置将根据环境进行调整。如果使用VPC,请参考前文的文章。

填補缺漏

如果还没有要删除的日志(索引),将会发生错误,但这不是异常情况。

广告
将在 10 秒后关闭
bannerAds