返回到文章

采纳

编辑于

ElasticSearch定时删除数据

elk ElasticSearch
ElasticSearch
运维

有的时候我们在使用ES时,由于资源有限或业务需求,我们只想保存最近一段时间的数据,所以有如下脚本可以定时删除数据

新建 delete_es_by_day.sh 脚本:

#!/bin/sh  
# example: sh  delete_es_by_day.sh logstash-kettle-log logsdate 30  

index_name=$1  
daycolumn=$2  
savedays=$3  
format_day=$4  

if [ ! -n "$savedays" ]; then  
  echo "the args is not right,please input again...."  
  exit 1  
fi  

if [ ! -n "$format_day" ]; then  
   format_day='%Y%m%d'  
fi  

sevendayago=`date -d "-${savedays} day " +${format_day}`  

curl -XDELETE "10.130.3.102:9200/${index_name}/_query?pretty" -d "  
{  
        "query": {  
                "filtered": {  
                        "filter": {  
                                "bool": {  
                                        "must": {  
                                                "range": {  
                                                        "${daycolumn}": {  
                                                                "from": null,  
                                                                "to": ${sevendayago},  
                                                                "include_lower": true,  
                                                                "include_upper": true  
                                                        }  
                                                }  
                                        }  
                                }  
                        }  
                }  
        }  
}"  

echo "ok"

注解:脚本传入参数说明:

  1. 索引名;
  2. 日期字段名;
  3. 保留最近几天数据,单位天;
  4. 日期格式,可不输(默认形式20160101)