运维小脚本每周分享: 用Python编写删除ES索引工具

网友投稿 1767 2022-10-04

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

运维小脚本每周分享: 用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 ARGUMENTS INDEX_NAMEFLAGS --ip=IP Default: '127.0.0.1' --port=PORT Default: 9200 --username=USERNAME Default: 'elastic' --password=PASSWORD        Default: 'ESabc'

默认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了

更多文章请扫一扫

上一篇:0516-如何查看Hive中某个角色所有已授权的组
下一篇:linux运维工程师中级面试题-20题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~