信创环境ES索引管理脚本:close, delete

背景

elastic-curator在信创环境无现成安装包,且现成一般无法联网,此时通过脚本管理es索引是最佳选择。

1, 脚本内容: es-close-del.sh

bash 复制代码
[root@myprojtest001 ]# cat es-close-del.sh
#/bin/bash

#elastic地址
ELASTIC_URL=127.0.0.1:9200
#默认的删除时间
DELETE_MONTH=6
#默认的关闭时间
CLOSE_MONTH=1
#默认index
#INDEX_NAME=s_awqed_
INDEX_NAME=
ES_USER_PWD=elastic:123456

#索引列表:例如 cs_myproj_2024 , qqq_myproj_2024_01, test_myproj_2024_01_03
INDEX_MSG=`curl  -s -u "$ES_USER_PWD" -XGET ${ELASTIC_URL}/_cat/indices | grep _myproj_ `
if [[ -z $INDEX_NAME ]] ; then
  INDEX_OPEN=`echo "$INDEX_MSG" |grep open | awk '{print $3}' | sort`
else
  INDEX_OPEN=`echo "$INDEX_MSG" |grep $INDEX_NAME | grep open | awk '{print $3}' | sort`
fi

#关闭索引的截止日期
CLOSE_DATE=`date -d "${CLOSE_MONTH} months ago" +%Y-%m-%d`
t_end_close=`date -d "${CLOSE_DATE}" +%s`

#删除索引的截止日期
DELETE_DATE=`date -d "${DELETE_MONTH} months ago" +%Y-%m-%d`
t_end_del=`date -d "${DELETE_DATE}" +%s`

#当前日期
t_end=`date +%s`
#遍历open的索引,判断是否应该关闭
for index in $INDEX_OPEN
do
    #获取索引日期
	#echo "-------$index--------"
	INDEX_DATE=$(echo $index|sed -E  's@([a-zA-Z0-9_-]+)_myproj_@@g' |sed 's@_@-@g')
	len1=${#INDEX_DATE} 

	#es按年存,设置为该年份的最后一个月截止 xx_2024 --> xx_2024_12_31
	if   [ $len1 -lt 5 ]; then
	    INDEX_DATE=$INDEX_DATE"-12-31"
	#es按月存,设置为该月份的最后一天截止 xx_2024_01 --> xx_2024_01_28
        elif [ $len1 -lt 10 ]; then  
	    INDEX_DATE=$INDEX_DATE"-28"
	fi
    t_start=`date -d "${INDEX_DATE}" +%s`
    x=$((t_end - t_start))

	##比截止日期早的数据
    #时间差几个月(不足1月就为0: 例如 24/30=0): 保证有1个月数据
    x2=$((x / 3600 /24 /30 -1 ))
    if [ ${t_start} -lt ${t_end_close} ] && [ $x2 -ge $CLOSE_MONTH  ]; then
            echo "close ${index} index"
            curl -u "$ES_USER_PWD" -XPOST ${ELASTIC_URL}/$index/_close
    fi
done


#删除
#遍历open的索引,判断是否应该删除
INDEX_ALL=`echo "$INDEX_MSG" |grep close | awk '{print $3}' | sort`
for index in $INDEX_ALL
do
    #获取索引日期
	#echo "-----$index--------"
	#INDEX_DATE=$(echo $index|sed -E  's@([a-zA-Z]_?)@@g'|sed 's@_@-@g')
	INDEX_DATE=$(echo $index|sed -E  's@([a-zA-Z0-9_-]+)_myproj_@@g' |sed 's@_@-@g')
	len1=${#INDEX_DATE} 

	#es按年存,设置为该年份的最后一个月
	if   [ $len1 -lt 5 ]; then
	    INDEX_DATE=$INDEX_DATE"-12-31"
	#es按月存,设置为该月份的最后一天
        elif [ $len1 -lt 10 ]; then  
	    INDEX_DATE=$INDEX_DATE"-28"
	fi
    t_start=`date -d "${INDEX_DATE}" +%s`
    x=$((t_end - t_start))

	##比截止日期早的数据
    #时间差几个月(不足1月就为0: 例如 24/30=0): 保证有1个月数据
    x2=$((x / 3600 /24 /30 -1))
    if [ ${t_start} -lt ${t_end_del} ] && [ $x2 -ge $DELETE_MONTH  ]; then
            echo "delete ${index} index"
            curl -u "$ES_USER_PWD" -XDELETE ${ELASTIC_URL}/$index
    fi
done

1, 脚本执行验证

bash 复制代码
[root@myprojtest001 ]# cat es-close-del.sh
close monitor_myproj_2023_09_07 index
{"acknowledged":true,"shards_acknowledged":true,"indices":{"monitor_myproj_2023_09_07":{"closed":true}}}

delete monitor_myproj_2023_09_07 index
{"acknowledged":true}
相关推荐
Elasticsearch1 小时前
使用 Jina 远程 MCP 服务器的 Agentic 工作流
elasticsearch
Elastic 中国社区官方博客1 小时前
在 Elastic 中使用 OpenTelemetry 内容包可视化 OpenTelemetry 数据
大数据·开发语言·数据库·elasticsearch·搜索引擎
Arva .4 小时前
ES 面试
elasticsearch·面试
鸿蒙程序媛5 小时前
【工具汇总】git 常用命令行汇总
大数据·git·elasticsearch
Elasticsearch6 小时前
多大才算太大?Elasticsearch 容量规划最佳实践
elasticsearch
Elastic 中国社区官方博客7 小时前
用于 IntelliJ IDEA 的新 ES|QL 插件
java·大数据·数据库·ide·elasticsearch·搜索引擎·intellij-idea
大志哥1238 小时前
整理安装ES和Logstash
大数据·elasticsearch·搜索引擎
Slow菜鸟8 小时前
Git Worktree 使用教程
大数据·git·elasticsearch
大气层煮月亮1 天前
RAG 检索技术 - Elasticsearch
大数据·elasticsearch·搜索引擎
Dontla1 天前
异步知识库索引管线:与在线问答链路解耦架构介绍(离线构建,在线查询)分层索引、Elasticsearch
elasticsearch·架构