AIOps 一场颠覆传统运维的盛筵
1767
2022-10-04
运维小脚本每周分享: 用Python编写删除ES索引工具
简介
功能:
批量删除Elasticsearch索引, 支持通配符支持删除指定时间范围内的索引, 如删除30天的索引,索引格式比如为 "index-2022.02.01"
Python库支持:
elasticsearchfiredatetime
脚本实现
安装依赖库
pip3 install --index-url http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com firepip3 install elasticsearch
代码:
from elasticsearch import Elasticsearchimport fireimport datetimedef indexTotime(index): '''获取索引后面的日期''' indexDate = index.split('-')[1] return indexDateclass ElasticsearchDel(object): def __init__(self,index_name,ip="127.0.0.1",port = 9200,username="elastic",password="ESabc"): '''初始化es连接''' self.ip = ip self.port = port self.index_name = index_name self.username = username self.password = password self.es = Elasticsearch( [self.ip], port=self.port, http_auth=(self.username, self.password), ) if self.es.ping(): print("Elasticsearch Connection Succeeded") else: print("Elasticsearch Connection Failed") def index_time_delete(self,day): '''删除某个时间段的索引''' self.day = (datetime.datetime.now()-datetime.timedelta(days=day)).strftime("%Y.%m.%d") for index in self.es.indices.get(f"{self.index_name}*"): if self.day > indexTotime(index): print(index + " =", self.es.indices.delete(index)) def index_delete(self): '''删除索引''' if self.es.indices.exists(index=self.index_name): return self.es.indices.delete(index=self.index_name) else: return "索引不存在"if __name__ == "__main__": fire.Fire(ElasticsearchDel)
elasticsearch方法简介:
es.indices.get: 获取索引列表es.indices.delete: 删除索引es.indices.exists: 判断索引是否存在
使用详解
查看帮助信息
#python3 esdel.py --helpNAME esdel.pySYNOPSIS esdel.py --index_name=INDEX_NAME
默认IP和端口:127.0.0.1,9200,本机执行的情况下,可以不指定IP
默认账号密码为elastic和ESabc,可以用--username和--password指定账号密码。
删除指定索引
# python3 esdel.py --index_name="eslog-2022.02.02" --ip="192.168.253.219" index_deleteElasticsearch Connection Succeededacknowledged: true
显示acknowledged: true表示删除成功
index_name:指定要删除的索引
index_delete: 加此删除,表示删除该索引
删除200天前的索引
# python3 esdel.py --index_name="eslog" --ip="192.168.253.219" index_time_delete 200Elasticsearch Connection Succeededeslog-2021.07.03 = {'acknowledged': True}eslog-2021.07.04 = {'acknowledged': True}eslog-2021.07.05 = {'acknowledged': True}eslog-2021.07.06 = {'acknowledged': True}eslog-2021.07.07 = {'acknowledged': True}eslog-2021.07.08 = {'acknowledged': True}eslog-2021.07.09 = {'acknowledged': True}eslog-2021.07.10 = {'acknowledged': True}eslog-2021.07.11 = {'acknowledged': True}eslog-2021.07.12 = {'acknowledged': True}eslog-2021.07.13 = {'acknowledged': True}eslog-2021.07.14 = {'acknowledged': True}eslog-2021.07.15 = {'acknowledged': True}eslog-2021.07.16 = {'acknowledged': True}eslog-2021.07.17 = {'acknowledged': True}eslog-2021.07.18 = {'acknowledged': True}eslog-2021.07.19 = {'acknowledged': True}eslog-2021.07.20 = {'acknowledged': True}eslog-2021.07.21 = {'acknowledged': True}eslog-2021.07.22 = {'acknowledged': True}
index_name:指定索引前缀, 比如eslog-2022.01.01,前缀为eslog
index_time_delete: 时间单位为:天
批量删除索引
# python3 esdel.py --index_name="eslog*" --ip="192.168.253.219" index_delete
这样会把eslog开头的索引全部删除。
最后配置个计划任务定期指定就ok了
更多文章请扫一扫
发表评论
暂时没有评论,来抢沙发吧~