使用python和snapshot备份ElasticSearch索引数据

该python备份snapshot的索引数据脚本,通过Elasticsearch连接es,然后通过es.indices.get_alias函数获取所有索引名称,通过列表的startswith函数剔除.开头的自带索引名称,然后把所有索引名称放到字符串.
通过es.snapshot.create_repository创建快照仓库,
通过es.snapshot.create函数完成快照备份.

# -*- coding: utf-8 -*-

import time
from elasticsearch import Elasticsearch
import sys

reload(sys)
sys.setdefaultencoding('utf8')

es = Elasticsearch(["http://es-cn*******.public.elasticsearch.aliyuncs.com"],http_auth=('*****', '*********'),Transport=9200)


# 获取所有的索引名称,包含.moni开头和.kibana
indices = es.indices.get_alias().keys()

# 获取当前时间,精确到秒
time_string = time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))
indices_list = []
# 把所有索引获取后,去除.开头的索引,赋予indices_list列表
for i in indices:
    new_indices = i
    if new_indices.startswith('.'):
        pass
    else:
        indices_list.append(new_indices)

# 把需要备份的索引列表转换成字符串
indices_string = ','.join(indices_list)

# 定义es快照内容
snapshot_body = {"type": "oss","settings": {\
"endpoint": "http://oss-****-internal.aliyuncs.com",\
"access_key_id": "*********",\
"secret_access_key": "********",\
"bucket": "q*-es-backup",\
"base_path": "snapshot/es*_dev/%s/"%(time_string),\
"compress": "true"} }

# 创建快照仓库
es.snapshot.create_repository(repository="snapshot", body=snapshot_body)
# 定义快照索引名称
index_body = {"indices": indices_string}
# 创建es索引快照,备份索引数据和结构
es.snapshot.create(repository="snapshot", snapshot="%s"%(time_string), body=index_body)

'''
#需要恢复的索引名称
restore_index_body = {"indices": "xyz_test"}
#执行恢复操作
es.snapshot.restore(repository="snapshot", snapshot="20191218", body=restore_index_body)
'''
# 精确匹配
#print(es.search(index='xyz_test', q='afterContent:积'))

你可能感兴趣的:(ELK)