将通过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函数
建议使用“CloudWatch Events”进行触发,使用 cron 表达式,在UTC时间00:00之后的时间点,每天进行执行(略去屏幕显示)。
网络设置将根据环境进行调整。如果使用VPC,请参考前文的文章。
填補缺漏
如果还没有要删除的日志(索引),将会发生错误,但这不是异常情况。