elasticsearch(es)定时删除7天前索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch(es)定时删除7天前索引相关的知识,希望对你有一定的参考价值。
es作为日志分析工具,采集nginx访问日志,项目log日志,心跳检测日志,服务器度量日志等,每天产生大量索引(Index),占用磁盘空间。对于过期数据不一定有用,需要进行删除来释放磁盘空间。
官网有_delete_by_query这个api进行删除,链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
curl -u 用户名:密码 -HContent-Type:application/json -d
"query":
"range":
"@timestamp":
"lt": "now-7d",
"format": "epoch_millis"
-XPOST "http://127.0.0.1:9200/*-*/_delete_by_query?pretty"
-u是格式为userName:password,使用Basic Auth进行登录。如果elasticsearch没有使用类似x-pack进行安全登录,则不需要加-u参数
-H是指定文档类型是json格式
-XPOST是指定用POST方式请求
-d是指定body内容 *-*应该是指定了所有索引名称,可以专门指定一个例如 filebeat-1,或者是filebeat开头的如filebeat-*。
"query":
"range": //范围
"@timestamp": //时间字段
"lt": "now-7d",//lt是小于(<),lte是小于等于(<=),gt是大于(>),gte是大于等于(>=),now-7d是当前时间减7天
"format": "epoch_millis"//不清楚,但是这个参数所有文章都带了,建议带上
可以使用linux自带的定时器执行每天删除 $ crontab -e
- 0 * * * /usr/bin/curl -u username:password -HContent-Type:application/json -d"query":"range":"@timestamp":"lt":"now-7d","format":"epoch_millis" -XPOST "http://127.0.0.1:9200/-/_delete_by_query?pretty" > /tmp/clean.txt
也可以使用自己的定时执行平台。
转载来自:https://anjia0532.github.io/2017/04/06/elasticsearch-delete-indices-by-date/ 上面有另外一个针对大量数据的清理方法,如有需要自己上去获取,这里我暂时用不到,仅做记录。
删除elasticsearch 30天前的所有索引
我的索引格式为
xxx-xxx-xxx-2019.06.27
xxx-xxxx-2019.06.27
脚本思路:
获取目前 es上所有索引,以日期进行拆分,然后用索引时间对比一个月前的日期,日期小于一个月的直接删除
#!/bin/bash # Remove the index of one month old in elasticserch CMD_ECHO=‘echo‘ SCRIPT_NAME=`basename $0` LOG_PRINT="eval $CMD_ECHO \"[$SCRIPT_NAME]\" @$(date +"%Y%m%d %T") [INFO] :" time_ago=30 es_cluster_ip=127.0.0.1 function delete_index() comp_date=`date -d "$time_ago day ago" +"%Y-%m-%d"` date1="$1 00:00:00" date2="$comp_date 00:00:00" index_date=`date -d "$date1" +%s` limit_date=`date -d "$date2" +%s` if [ $index_date -le $limit_date ];then $LOG_PRINT "$1 will perform the delete task earlier than $time_ago days ago" >> tmp.txt del_date=`echo $1 | awk -F "-" ‘print $1"."$2"."$3‘` curl -XDELETE http://$es_cluster_ip:9200/*$del_date >> tmp.txt fi # get the date in all index curl -XGET http://$es_cluster_ip:9200/_cat/indices|awk -F " " ‘print $3‘ | egrep "[0-9]*\.[0-9]*\.[0-9]*" |awk -F "-" ‘print $NF‘ | awk -F "." ‘print $((NF-2))"-"$((NF-1))"-"$NF‘ | sort | uniq | while read LINE do delete_index $LINE done
以上是关于elasticsearch(es)定时删除7天前索引的主要内容,如果未能解决你的问题,请参考以下文章