ES索引生命周期管理

news2024/11/16 19:46:58

基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习

快速上手 :定时删除ES索引中的过期数据

1. ILM解决什么问题?

ES从6.7版本引入ILM,通过ILM可以解决哪些问题呢?

  1. 自动新建索引,当索引大小达到阈值时自动创建新索引
  2. 过期数据清理,索引每天新增的数据过大,需要定时删除旧的索引数据。
  3. 索引数据备份,一些旧的数据不需要再进行修改和查询,但是需要保留一定的时长
  4. 降低资源消耗,一些需要查询但是极低频的数据可以存放在性能差一点的机器上

2. ILM是如何运作的?

通过配置生命周期策略,将其关联到索引上,通过索引别名往索引中写入数据,当索引触发生命周期策略时自动创建新的索引或自动推进索引阶段。

2.1 索引滚动创建

在这里插入图片描述

  1. 数据通过索引别名写入,不直接使用索引名称写入数据
  2. 通过配置索引策略来触发索引滚动生成新的索引,生成新索引后别名自动指向新的索引。
  3. 触发索引rollover有三种方式:索引大小达到阈值,索引存在时间达到设定时间,文档数达到设定值

2.2 索引从生到死

索引生命周期策略针对单个索引,把索引分为几个阶段,Hot、Warm、Cold、Delete,可以通过生命周期策略的配置来决定索引在什么时间或什么条件下进入下一阶段,只有Hot阶段是必须的。
在这里插入图片描述
可以根据不同的使用场景来配置不同的生命周期策略:
如果只需要进行自动创建新的索引(避免单个索引数据量过大,不方便迁移或数据维护),可以只配置Hot策略
如果需要自动删除旧的索引,可以再配置一个Delete策略
如果需要隔离读和写,可以配置一个Warm策略
如果需要备份数据或减低资源消耗,可以配置一个Cold策略

2.3 生命周期策略配置

创建一个索引生命周期策略

PUT _ilm/policy/demo_policy
{
 "policy": {
   "phases": {
     "hot": {
       "actions": {
         "rollover": {
           "max_size": "15gb",
           "max_age": "7d",
           "max_docs" : 10000000
         }
       }
     },
     "delete": {
       "min_age": "7d",
       "actions": {
         "delete": {}
       }
     }
   }
 }
}

以上是一个简单的索引生命周期策略的配置
当索引大小达到15G或者索引创建时长达到7天或者文档数量达到1千万时建立新的索引
创建新的索引后,旧的索引7天后自动删除

3. 索引生命周期策略

在上文中简单说明了ILM原理,也有简单的demo实战,我们进行深入学习。

3.1 索引与生命周期策略之间的一些关系

在这里插入图片描述

  • 在数据写入时通过别名logs写入,别名指向最新的索引
  • 在数据查询时通过pattern logs*进行查询,从多个索引中查询数据,当索引处理Delete阶段时,将查询不到索引中的数据
  • 索引自动创建时命名会以logs开头,自动匹配索引模板log-template
  • 索引模板中设置了索引的生命周期策略demo-policy以及索引滚动时关联的别名

3.2 索引生命周期各阶段的action

在索引不同阶段可以配置不同的action策略,下图是各阶段的关键action
在这里插入图片描述
Action含义
在这里插入图片描述
各阶段可执行的action
在这里插入图片描述

4. 定时删除ES索引中的过期数据

定时删除索引中旧数据,比如删除7天或30天之前的数据

基于ILM来清理旧数据并不是直接处理指定索引,不是针对一个固定的索引去删除指定时间范围之前的数据,而是通过设置ILM策略生成新的索引,再把旧的索引直接删除,可以设置旧索引的保留天数。

类似于日志框架的滚动日志生成,对于旧的日志文件可以进行删除,而不是去清理一个日志文件中旧的日志数据。

demo流程

配置一个索引生命周期策略 -> 将策略关联到索引 -> 触发策略生成新索引 -> 等待策略自动删除旧索引

4.1 API方式实现

4.1.1 创建生命周期策略

PUT _ilm/policy/demo_policy
{
 "policy": {
   "phases": {
     "hot": {
       "actions": {
         "rollover": {
           "max_size": "15gb",
           "max_age": "7d",
           "max_docs" : 10000000
         }
       }
     },
     "delete": {
       "min_age": "7d",
       "actions": {
         "delete": {}
       }
     }
   }
 }
}

其中:

  1. 索引生命周期一共有四个阶段,hot、delete是其中的两个阶段,我们这里验证下过期删除,只要配置hot跟delete就可以了。
  2. rollover表示生成新索引的触发条件,满足其中一条就会触发策略自动生成新的索引
    max_size:1mb 表示索引大小达到1M时触发
    max_age:5m 表示索引建立时长到达5分钟时触发
    max_docs:10 表示文档数量达到10个时触发
  3. delete阶段中min_age:5m 表示旧索引保留5分钟后删除

4.1.2 创建索引模板关联策略

PUT _index_template/test_policy_template
{
 "index_patterns": ["test_policy*"],
 "template": {
   "settings": {
     "number_of_shards": 1,
     "number_of_replicas": 0,
     "index.lifecycle.name": "demo_policy",
     "index.lifecycle.rollover_alias": "policy_index_alias"
   }
 }
}

其中:

  1. index_patterns表示test_policy开头的所有索引都会自动使用该模板,通过设置索引模板,创建相应的索引时会自动带上模板中的一些索引设置,比如给索引设置生命周期策略,设置rollover别名等等
  2. 单机部署时 number_of_replicas需要设置为0,否则索引健康状态为yellow,不会自动推进索引的阶段
  3. index.lifecycle.name 是上述创建的生命周期策略的名称
  4. index.lifecycle.rollover_alias 是索引生命周期关联的索引别名,往索引中写入数据时需要通过别名写入,当触发生命生成新的索引时,该索引别名会指向新的索引,通过别名写入时数据就会写入到新的索引中

4.1.3 创建索引并验证

创建索引

PUT /test_policy-1
{
  "aliases": {
    "policy_index_alias": {
      "is_write_index": true
    }
  }
}
  1. 创建索引需要以数字结尾
  2. 创建索引时需要指定索引别名,与rollover_alias别名相同
  3. 以test_policy开头命名,会自动匹配到test_policy_template索引模板,基于该索引模板创建索引

触发索引生命周期策略

配置的三种方式均可触发,我们选其中的文档数触发
通过别名往索引中写入11条数据,执行下述测试数据11次

POST policy_index_alias/_doc
{
  "message": "logged the request",
  "@timestamp": "1633677855467"
}

验证

  1. 查询是否创建新的索引,是否自动删除索引
GET /_cat/indices/test_policy*
  1. 修改生命周期策略检查间隔
    ES默认每10分钟检查一次索引是否满足策略,如果满足将支持对应的action, 我们修改时间间隔为20s
PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval": "20s" 
  }
}
  1. 查询索引生命周期状态
    step: check-rollover-ready 此时还未触发索引rollover
GET /test_policy-1/_ilm/explain

{
  "indices" : {
    "test_policy-1" : {
      "index" : "test_policy-1",
      "managed" : true,
      "policy" : "demo_policy",
      "lifecycle_date_millis" : 1727787555665,
      "age" : "58.08s",
      "phase" : "hot",
      "phase_time_millis" : 1727787578241,
      "action" : "rollover",
      "action_time_millis" : 1727787578241,
      "step" : "check-rollover-ready",
      "step_time_millis" : 1727787578241,
      "phase_execution" : {
        "policy" : "demo_policy",
        "phase_definition" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "1mb",
              "max_age" : "5m",
              "max_docs" : 10
            }
          }
        },
        "version" : 1,
        "modified_date_in_millis" : 1727785358650
      }
    }
  }
}

后续可以持续观察,达到设定的时间后便会自动生成新的索引,旧的索引达到设定时间后会自动删除

4.2 通过Kibana设置实现

4.2.1 配置生命周期策略

Management -> Stack Management -> Index Lifecycle Policies -> Create policy
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.2 创建索引模板

在这里插入图片描述
在这里插入图片描述
我们在初始化的时候再设置别名,否则会出现报错
在这里插入图片描述

创建索引并验证(流程同API方式4.1.3)

在这里插入图片描述
可以看到生命周期阶段信息
在这里插入图片描述

5. 相关API汇总

1. 创建生命周期策略

PUT _ilm/policy/demo_policy
{
 "policy": {
   "phases": {
     "hot": {
       "actions": {
         "rollover": {
           "max_size": "15gb",
           "max_age": "7d",
           "max_docs" : 10000000
         }
       }
     },
     "warm" : {
       "min_age" : "2d",
       "actions" : {
         "shrink" : {
           "number_of_shards" : 1
         },
         "forcemerge" : {
           "max_num_segments" : 1
         }
       }
     },
     "delete": {
       "min_age": "7d",
       "actions": {
         "delete": {}
       }
     }
   }
 }
}

2. 创建索引模板

PUT _index_template/test_policy_template
{
 "index_patterns": ["test_policy*"],
 "template": {
   "settings": {
     "number_of_shards": 1,
     "number_of_replicas": 0,
     "index.lifecycle.name": "demo_policy",
     "index.lifecycle.rollover_alias": "policy_index_alias"
   }
 }
}

3. 初始化索引

PUT /test_policy-1
{
  "aliases": {
    "policy_index_alias": {
      "is_write_index": true
    }
  }
}

4. 设置生命周期策略检查间隔

PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval": "20s" 
  }
}

5. 查看索引生命周期状态

GET /test_policy-1/_ilm/explain

6. 生命周期策略重试

POST /log-2024.09.28-000030/_ilm/retry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 课程22-Pillow

前言 Pillow 是一个 Python 图像处理库,是 Python Imaging Library (PIL) 的升级版。Pillow 提供了对常见图像文件格式(如 PNG、JPEG、GIF 等)的支持,并允许你进行图像裁剪、调整大小、旋转、滤镜应用、文本添加等操作。Pillow 广…

Applio:颠覆语音克隆的AI黑科技!

Applio:颠覆语音克隆的AI黑科技! Applio是一个神奇的AI语音克隆工具✨,提供超过20,000种声音模型🎤,让你轻松创造独特音色🎶!开源社区欢迎所有人参与,共同探索AI音频的无限可能&…

蓝桥杯备赛---2.新建工程

推荐根据视频进行工程建立 开发板资源简介&工程模板建立_哔哩哔哩_bilibili 目录 推荐根据视频进行工程建立 1.点击"File"下的"New Project"新建一个工程 ​编辑 2. 查看官方给的数据手册,选择对于的单片机型号 3. 查看原理图&#…

银河麒麟操作系统中设置进程堆栈大小的方法

银河麒麟操作系统中设置进程堆栈大小的方法 1、临时修改堆栈大小步骤一:查看当前堆栈大小步骤二:修改堆栈大小 2、永久修改堆栈大小步骤一:查看当前堆栈大小(可选)步骤二:编辑配置文件步骤三:注…

论文精读--Two-Stream Convolutional Networks for Action Recognition in Videos

对于单张图片,丢进卷积和全连接层直接得出分类结果就行 但对于视频,早期的一些工作把视频中的一些关键帧抽取出来,把一个个帧通过网络,最后把结果合并,或者把帧叠起来,一起丢进网络。在网络中进行early fu…

【C++】模拟实现红黑树

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 📌实现RBTreeNode类模板 🎏构造RBTreeNode类成员变量 🎏实现RBTreeNode类构…

【数据结构】堆(Heap)详解----定义堆、初始化,删除、插入、销毁、判空、取堆顶

文章目录 一、堆的概念及其性质:堆的概念:堆的性质: 二、堆的定义及其基础操作的代码实现(C语言版)1.定义堆2.堆的初始化3.堆的销毁4.堆的插入5.堆的删除6.取堆顶的数据7.堆的数据个数8.堆的判空 总结: 提示…

Python开发环境配置(mac M2)

1. 前言 作为一名程序员,工作中需要使用Python进行编程,甚至因为项目需要还得是不同版本的Python如何手动管理多个版本的Python,如何给Pycharm(IDE)配置对应的interpreter等,都成为一个 “不熟练工” 的难…

【面向对象】设计模式概念和分类

零.前提提要 本文章是我考中级软件设计师时的笔记,基本都是一些自己的思路和见解,现记录一下,希望可以帮助到即将考证的同学。 一.面向对象设计模式的概念 二.面向对象的设计模式分类 设计模式确定了所包含的类和实例、他们的角色和写作方式以…

AMBER学习记录--使用Multiwfn计算有机小分子的RESP电荷--问题及解决

1 ORCAMultiwfn在wsl中的安装 ORCA的安装参考量子化学程序ORCA的安装方法 - 思想家公社的门口:量子化学分子模拟二次元 (sobereva.com) Multiwfn的安装 参考保姆级安装Linux版Multiwfn教程_multiwfn安装过程-CSDN博客 2 计算C3G的RESP电荷 2.1从pubchem上下载C3G的…

77. 组合【含回溯详解、N叉树类比、剪枝优化】

文章目录 77. 组合思路暴力法回溯与N叉树类比回溯法三部曲 总结剪枝优化剪枝总结 77. 组合 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出&am…

spring loCDI 详解

文章目录 一、IoC & DI 基本知识1.1 IoC 的基本概念:1.2 IoC 的优势:1.3 DI 介绍: 二、IoC 详解2.1 Spring 容器:2.2 被存储 Bean 的命名约定:2.3 Bean 的存储方式:2.3.1 五大类注解:2.3.1.…

MySQL高阶2010-职员招聘人数2

目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…

linux文件编程_进程

1. 进程相关概念 面试中关于进程,应该会问的的几个问题: 1.1. 什么是程序,什么是进程,有什么区别? 程序是静态的概念,比如: 磁盘中生成的a.out文件,就叫做:程序进程是…

Linux常用语法

Linux常用语法 0.引言特殊路径符Linux 命令基础格式重要命令mkdir命令echo-tail命令 vi\vim编辑器的三种工作模式vi/vim简单介绍基础命令 运行模式命令模式下的快捷键 进程管理进程的命令 Linux解压缩tar格式zip命令unzip命令 ping,wget,curl等命令的使用Linux端口端口端口的划…

【算法篇】回溯算法类(1)(笔记)

目录 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 二、LeetCode 题目 1. 组合 2. 组合总和III 3. 电话号码的字母组合 4. 组合总和 5. 组合总和II 6. 分割回文串 7. 复原IP地址 8. 子集 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 void backtr…

光通信——APON/EPON/GPON/10G PON

目录 APON EPON GPON 上下行对称和非对称速率 OAM功能 汇聚子层 ATM封装方式 GEM封装方式 10G EPON EPON/GPON技术原理和特点 工作原理 关键技术 (1)测距、同步 (2)突发发送和接收 (3&#xff09…

基于Word2Vec和LSTM实现微博评论情感分析

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…

【mmengine】优化器封装(OptimWrapper)(入门)优化器封装 vs 优化器

MMEngine 实现了优化器封装,为用户提供了统一的优化器访问接口。优化器封装支持不同的训练策略,包括混合精度训练、梯度累加和梯度截断。用户可以根据需求选择合适的训练策略。优化器封装还定义了一套标准的参数更新流程,用户可以基于这一套流…

SWAP、AquaCrop、FVCOM、Delft3D、SWAT、R+VIC、HSPF、HEC-HMS......

全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程&…