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

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y_zilong

一分钱的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值