架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4575|回复: 0

【实战】Elasticsearch 自动清理索引释放磁盘空间

[复制链接]
发表于 2022-3-13 13:22:29 | 显示全部楼层 |阅读模式
使用 Elasticsearch 储存着业务系统的日志,每天都会根据日期生成一个新的索引,每天都有百万条文档,时间一长,如果不及时清理 Elasticsearch 索引,就会造成磁盘占用空间大,给磁盘造成很大的压力,搜索速度也会变的慢了。之前一直手动清理 es 的索引和使用 shell 脚本定时清理,其实 es 可以创建索引生命周期策略来帮助我们删除旧的历史索引。

本文使用的 elasticsearch 版本是:7.10.2

首先,我们看一下已有的索引,索引名称是根据日期进行创建的,今天是 2022-03-11 日,可以看到 2022 年 1 月份的索引和文档还存在,如下图:

QQ截图20220311141637.jpg

创建索引模板

打开 Kibana 管理面板,点击索引管理 -> 索引模板 -> 创建索引模板,名称填写:logger-template,索引模块填写需要匹配的索引,然后一直下一步即可,如下图:

QQ截图20220311142137.jpg

备注:当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。也就是当创建 itsvse-2022-03-13 索引的时候,会匹配到 logger-template 版本,然后执行模板设置的规则,历史索引(即使匹配模板)也不会关联到索引模板!!!在本文中,没有根据模板创建的 index 不能被自动删除

创建索引生命周期策略

打开 Kibana 管理面板,点击索引生命周期策略 -> 创建策略,如下图:

QQ截图20220311142431.jpg

名称填写“auto-clean-30-days-logger”,取消勾选“启用滚动更新”,如下图:

QQ截图20220311142543.jpg

打开删除阶段,自动清理 30 天之前的索引,如下图:

QQ截图20220311142557.jpg

最后,将策略添加到索引模板,如下图:

QQ截图20220311142655.jpg QQ截图20220311142740.jpg

至此,新建的索引会自动保存 30 天,超出 30 天的索引会被删除,历史索引还需要手动清理一下!!!手动删除索引,请参考:

【实战】Elasticsearch删除索引所有文档数据
https://www.itsvse.com/thread-6321-1-1.html
查看刚才创建的索引模板,将应用于匹配索引的最终模板。详情如下:

{
  "template": {
    "settings": {
      "index": {
        "lifecycle": {
          "name": "auto-clean-30-days-logger"
        }
      }
    },
    "aliases": {},
    "mappings": {}
  }
}
QQ截图20220313131026.jpg

查看策略配置接口,例如:http://192.168.1.182:9200/_ilm/policy/auto-clean-30-days-logger?pretty

{
  "auto-clean-30-days-logger" : {
    "version" : 1,
    "modified_date" : "2022-03-11T06:26:01.972Z",
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : {
          "min_age" : "30d",
          "actions" : {
            "delete" : {
              "delete_searchable_snapshot" : true
            }
          }
        }
      }
    }
  }
}


ILM(索引生命周期管理)

我们新建的索引生命周期策略,是通过定时轮询执行的。

ILM Service 会在后台轮询执行策略:

ILM 定义了四个生命周期阶段:
Hot:正在积极地更新和查询索引。
Warm:不再更新索引,但仍在查询。
cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。
Delete:不再需要该索引,可以安全地将其删除。

ILM 定期运行(indices.lifecycle.poll_interval),默认是10分钟,检查索引是否符合策略标准,并执行所需的任何步骤。
为了避免争用情况,ILM可能需要运行多次以执行完成一项动作所需的所有步骤。所以,即使indices.lifecycle.poll_interval设置为10分钟并且索引符合rollover,也可能需要20分钟才能完成rollover。
举例:比如我们设定超过10篇文档就rollover,但是因为这个过程不是立即实现的,可能第11,12篇还在落在之前的索引上,直到rollover成功后,新建的文档才会落在新的索引上。

Elasticsearch 中的索引生命周期管理设置:https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-settings.html

查看 ILM 状态

QQ截图20220311143817.jpg

现在是 2022-03-13 日,每天会自动创建 2 个索引,可以看到创建的索引,已经自动关联了策略,如下图:

QQ截图20220313131245.jpg

(完)





上一篇:【实战】Maven 项目将项目和依赖分开打包
下一篇:【实战】使用 Docker 搭建 IPsec VPN 服务器
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-19 01:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表