elasticsearch 如何清理过期的数据
Posted y_zilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch 如何清理过期的数据相关的知识,希望对你有一定的参考价值。
使用elasticsearch收集日志进行处理,时间久了,很老的数据就没用了并且占用很大的磁盘,这个时候就要对过期数据进行清理
删除elasticsearch数据分为两种:一种是删除索引(数据和表结构同时删除,作用同sql server 中 drop table "表格名"),另一种是删除数据(不删除表结构,作用同 sql server中delete 语句)
1、删除索引
#查询索引
[root@ecloud-elk-05 opt]# curl -u zhanghao:mima -XGET 'http://10.56.0.103:9200/_cat/indices'
green open bizlog-2021.09.11 pHsgvR7JQhmgMIBX24zhJg 1 1 25506896 2480707 44.3gb 22.1gb
green open bizlog-2021.10.01 noexo6r6Qe61qxmB30YzBQ 1 1 17382250 1859034 26.3gb 13.1gb
green open bizlog-2021.09.12 oYy6PpJERKatZnbhVJ6ZyA 1 1 19184655 1839037 33.1gb 16.5gb
green open bizlog-2021.09.13 w2LY5073QGy1I7r_9j1qag 1 1 29137518 2598039 49gb 24.5gb
green open deliver-2021.11.21 iNezTH7ISHmTt_dG3SdIvg 10 1 20071 0 7.9mb 3.9mb
#查询索引的列表
[root@ecloud-elk-05 opt]# curl -u zhanghao:mima -XGET 'http://10.56.0.103:9200/_cat/indices' |awk 'print $3' | awk -F'-' 'print $1' |sort |uniq -c
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45633 100 45633 0 0 41564 0 0:00:01 0:00:01 --:--:-- 41597
46 api_nginx_log
2 .apm
1 .async
107 bizlog
68 ctlog
71 deliver
1 .kibana_1
1 .kibana_task_manager_1
1 redis
1 .reporting
1 .security
71 zmms_system
#清理索引
[root@ecloud-elk-05 0]# curl -XDELETE -u zhanghao:mima http://10.56.0.103:9200/ctlog-2021.09.02
"acknowledged":true[root@ecloud-elk-05 0]#
清理索引的脚本一
[root@ecloud-elk-05 opt]# cat delete_es.sh
#********************************************************************
#Author: yzl
#QQ: calm_yzl@163.com
#Date: 2021-11-23
#FileName: es_index_clear.sh
#URL: yzil.cn
#Description: The test script
#Copyright (C): 2021 All rights reserved
#********************************************************************
username=zhanghao
passwd=mima
ruikaecs='10.56.0.103'
datemask=$(date -d "-30 day" '+%Y-%m-%d')
index_list=(api_nginx_log bizlog ctlog deliver zmms_system)
for indexname in $index_list[@];do
echo "`date '+%Y%m%d-%H%M%S'`clean index data:$indexname-$datemask"
curl -XDELETE -u $username:$passwd "http://$ruikaecs:9200/$indexname-$datemask"
echo "done"
done
清理索引的脚本二
#Author: yzl
#QQ: calm_yzl@163.com
#Date: 2021-11-23
#FileName: es_index_clear.sh
#URL: yzil.cn
#Description: The test script
#Copyright (C): 2021 All rights reserved
#********************************************************************
# 需要清理几天以前的索引日志
CLEAN_DAY=30
# 获取N天以前的年月日
YEAR=$(date -d "$(date -I) -$CLEAN_DAY"day"" +%Y)
MONTH=$(date -d "$(date -I) -$CLEAN_DAY"day"" +%m)
DAY=$(date -d "$(date -I) -$CLEAN_DAY"day"" +%d)
# 获取需要过滤N天前的ES索引数据
DATA=`curl -s http://zhanghao:mima@10.56.0.103:9200/_cat/indices?v \\
|awk '/[0-9]4.[0-9]2.[0-9]2/print $3' |awk -F[-.] 's2=mktime($(NF-2)" "$(NF-1)" "$NF" 0 0 0");\\
s1=systime()if(s1-s2 >= 86400*"'$CLEAN_DAY'") print $0'`
echo "即将清理"$YEAR'-'$MONTH'-'$DAY"前ES索引数据>>>>>>>>"
echo "清理数据为: "$DATA
# 执行清理工作
for i in $DATA
do
sleep 1
#curl -XDELETE -u zhanghao:mima http://10.56.0.103:9200/$i
done
echo "======================="
echo "执行完成"
echo "======================="
2、使用官网 delete_by_query进行删除
curl -u 用户名:密码 -H'Content-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内容
"query":
"range": //范围
"@timestamp": //时间字段
"lt": "now-7d",//lt是小于(<),lte是小于等于(<=),gt是大于(>),gte是大于等于(>=),now-7d是当前时间减7天
"format": "epoch_millis"
定时删除
$ crontab -e
* 0 * * * /usr/bin/curl -u username:password -H'Content-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/elk_clean.txt
每天0点删除超过7天的无效索引
优点:
不依赖第三方插件或者代码
简单易理解
不需要指定索引名称可用*通配符删除
缺点:
效率低
常见命令
查看索引列表
curl -k https://your_username:your_password@10.124.10.27:9200/_cat/indices?v
查询集群是否健康
curl -k https://your_username:your_password@10.124.10.27:9200/_cluster/health
查看所有shard
curl -k https://your_username:your_password@10.124.10.27:9200/_cat/shards
启动命令
/usr/local/elasticsearch/bin/elasticsearch -d
以上是关于elasticsearch 如何清理过期的数据的主要内容,如果未能解决你的问题,请参考以下文章