#!/bin/bash # 设置日期格式:例如 2024-12-05-23 CURRENT_DATE=$(date "+%Y-%m-%d-%H") # 获取 Elasticsearch 的 CLUSTER-IP ELASTICSEARCH_IP=$(microk8s.kubectl get service/elasticsearch -n efk -o json | jq -r '.spec.clusterIP') # 调试:检查获取到的 IP 地址 echo "Elasticsearch IP: ${ELASTICSEARCH_IP}" # 如果获取到的 IP 地址为空,则退出脚本 if [ -z "$ELASTICSEARCH_IP" ]; then echo "无法获取到 Elasticsearch IP 地址,退出脚本。" exit 1 fi # Elasticsearch 用户名和密码 USER="elastic" PASSWORD="your_secure_password" # 尝试删除当前小时的备份(如果存在) DELETE_CURRENT_SNAPSHOT_URL="http://${ELASTICSEARCH_IP}:9200/_snapshot/my_backup/snap-${CURRENT_DATE}" echo "尝试删除当前小时的备份:${DELETE_CURRENT_SNAPSHOT_URL}" curl -u ${USER}:${PASSWORD} -X DELETE "${DELETE_CURRENT_SNAPSHOT_URL}" # 检查删除操作是否成功 if [ $? -eq 0 ]; then echo "成功删除当前小时的备份:${CURRENT_DATE}" else echo "当前小时的备份不存在,继续进行创建操作。" fi # 创建当前小时的快照 BACKUP_URL="http://${ELASTICSEARCH_IP}:9200/_snapshot/my_backup/snap-${CURRENT_DATE}" echo "备份请求的 URL: ${BACKUP_URL}" curl -u ${USER}:${PASSWORD} -X PUT "${BACKUP_URL}" -H 'Content-Type: application/json' -d '{ "indices": "*", "ignore_unavailable": true, "include_global_state": false }' # 检查备份是否成功 if [ $? -eq 0 ]; then echo "备份成功:${CURRENT_DATE}" # 删除7天前的备份 OLD_SNAPSHOT_DATE=$(date --date='7 days ago' "+%Y-%m-%d-%H") DELETE_URL="http://${ELASTICSEARCH_IP}:9200/_snapshot/my_backup/snap-${OLD_SNAPSHOT_DATE}" # 打印删除请求的 URL 进行调试 echo "删除旧备份请求的 URL: ${DELETE_URL}" # 使用 curl 删除旧备份 curl -u ${USER}:${PASSWORD} -X DELETE "${DELETE_URL}" if [ $? -eq 0 ]; then echo "成功删除7天前的备份:${OLD_SNAPSHOT_DATE}" else echo "删除7天前的备份失败:${OLD_SNAPSHOT_DATE}" fi else echo "备份失败:${CURRENT_DATE}" fi echo "当前快照列表:" curl -u elastic:your_secure_password -X GET "http://${ELASTICSEARCH_IP}:9200/_snapshot/my_backup/_all" | jq -r '.snapshots[].snapshot'