Elastic Search(五):索引生命周期管理 - ilm

news2024/11/13 12:00:29

目录

  • 1 ES:索引生命周期管理 - ilm
    • 1.1 介绍
      • 1、ILM
        • 阶段转换
        • 阶段执行
        • 阶段操作
    • 1.2 索引生命周期操作
      • 1、设置 索引生命周期
    • 1.3 索引生命周期管理
      • 1、创建 生命周期策略
      • 2、创建索引模板,模板中关联 policy
      • 3、创建符合模板的起始索引,设置别名(即我们统一对外提供服务的索引名)
      • 4、测试
      • 5、简易模式
      • 6、对已有索引添加生命周期策略

1 ES:索引生命周期管理 - ilm

1.1 介绍

ILM(Information Lifecycle Management)即信息生命周期管理,是一个涵盖信息在其整个生命周期中各个阶段的管理概念,ILM是指从一个信息系统数据及其相关元数据产生和初始储存阶段到最后过时被删除时的一套综合管理方法。

创建并应用索引生命周期管理(ILM)策略,以根据性能、弹性和保留要求自动管理索引。

  • 索引生命周期策略可以触发以下操作,例如:
  • 滚动(Rollover):当现有索引达到一定的时间、文档数量或大小时,将别名重定向以开始写入新索引。
  • 收缩(Shrink):减少索引中的主分片数量。
  • 强制合并(Force merge):手动触发合并以减少索引中每个分片中的段数,并释放被删除文档占用的空间。
  • 冻结(Freeze):使索引变为只读并最小化其内存占用。
  • 删除(Delete):永久删除索引,包括所有数据和元数据。

ilm在hot-warm-cold结构中,使管理索引变得更加简单,这种结构在处理时间序列数据(如日志和指标)时很常见。

可以在ilm中指定:

  • 希望滚动到新索引时的最大分片大小、文档数量或时间。
  • 索引不再更新且可以减少主分片数量的时间点。
  • 何时强制合并以永久删除标记为删除的文档。
  • 索引可以移动到性能较低的硬件的时间点。
  • 可用性不那么关键且可以减少副本数量的时间点。
  • 可以安全删除索引的时间点。

例如,如果正在将来自一系列ATM机的指标数据索引到Elasticsearch中,可以定义这样一个策略:

  • 当索引达到50GB时,滚动到新索引。
  • 将旧索引移入温阶段,将其标记为只读,并将其缩减为单个分片。
  • 7天后,将索引移入冷阶段并将其移至成本较低的硬件。
  • 在达到所需的30天保留期后删除索引。

1、ILM

ILM定义了四个索引生命周期阶段:

  • Hot(热):索引正在被积极更新和查询。
  • Warm(温):索引不再被更新但仍然被查询。
  • Cold(冷):索引不再被更新且很少被查询。信息仍然需要可被搜索,但如果这些查询稍微慢一些也没关系。
  • Delete(删除):索引不再需要并且可以安全地移除。

一个索引的生命周期策略指定了哪些阶段适用,每个阶段执行哪些操作,以及索引在不同阶段之间何时转换。

可以在创建索引时手动应用一个生命周期策略。对于时间序列索引,需要将生命周期策略与用于创建系列中新索引的索引模板相关联。当索引滚动时,手动应用的策略不会自动应用于新索引。

阶段转换

ILM根据索引的age将它们通过生命周期移动。为了控制这些转换的时间,你为每个阶段设置一个最小age。为了将索引移动到下一个阶段,当前阶段的所有操作必须完成,并且索引必须比下一个阶段的最小age更老。

最小age默认设置为零,这会导致ILM在当前阶段的所有操作完成后立即将索引移动到下一个阶段。

如果索引有未分配的分片且集群健康状态为黄色,索引仍然可以根据其索引生命周期管理策略转换到下一个阶段。然而,由于Elasticsearch只能在绿色集群上执行某些清理任务,因此可能会出现意外的副作用。

为了避免增加的磁盘使用和可靠性问题,请及时解决任何集群健康问题。

阶段执行

ILM 控制一个阶段中操作的执行顺序,以及执行每个操作所需的必要索引步骤。

当索引进入一个阶段时,ILM 会在索引元数据中缓存该阶段的定义。这确保了策略更新不会将索引置于无法退出该阶段的状态。如果更改可以安全地应用,ILM 会更新缓存的阶段定义。如果无法应用,则使用缓存的定义继续执行阶段。

ILM 会定期运行,检查索引是否符合策略标准,并执行所需的任何步骤。为了避免竞态条件,ILM 可能需要运行多次以执行完成一个操作所需的所有步骤。例如,如果 ILM 确定一个索引已达到滚动标准,它将开始执行完成滚动操作所需的步骤。如果它达到一个不能安全进入下一步的点,执行将停止。下次 ILM 运行时,它将从上次停止的地方继续执行。这意味着,即使将 indices.lifecycle.poll_interval 设置为 10 分钟,并且索引满足滚动标准,也可能需要 20 分钟才能完成滚动。

阶段操作

ILM 支持在每个阶段执行以下操作。

Hot(热)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 滚动 (Rollover)

Warm(温)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 只读 (Read-Only)
  • 分配 (Allocate)
  • 收缩 (Shrink)
  • 强制合并 (Force Merge)

Cold(冷)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 分配 (Allocate)
  • 冻结 (Freeze)

Delete(删除)

  • 等待快照 (Wait For Snapshot)
  • 删除 (Delete)

1.2 索引生命周期操作

1、设置 索引生命周期

重点:这里delete指定的是当老的索引index超过rollver的时间,后的delete指定时间才被删掉。而不是索引的创建时间。

如果是索引按指定时间rollver,那删除时间就是rollver中的max_age+delete指定时间,才被删除。而索引按容量或者文档数量(max_size、max_docs)那么就小于 max_age+delete指定时间 就被删除。

官网对于删除的定义是:Delete the index 30d days after rollover.(30d是这里设置的删除时间)

总结来说就是:当这个索引不再写入数据(即创建新索引)开始算在delete设定时间后删除

1.3 索引生命周期管理

要使用 ILM 自动滚动更新和管理时间序列索引,您可以:
1.创建一个生命周期策略,定义适当的 阶段和行动。
2.创建索引模板以将策略应用于每个新索引。
3.引导索引作为初始写入索引。
4.验证索引是否按预期在生命周期阶段移动。

1、创建 生命周期策略

# 官方示例
PUT _ilm/policy/timeseries_policy
{
  "policy": {
    "phases": {
      "hot": {         # 默认值为 min_age,因此新索引会立即进入该阶段                 
        "actions": {
          "rollover": {    # 当满足任一条件时触发操作
            "max_size": "50GB",     
            "max_age": "30d"
          }
        }
      },
      "delete": {
        "min_age": "90d",           #  在展期后 90 天将指数移至阶段
        "actions": {
          "delete": {}                 
        }
      }
    }
  }
}

## 实际使用
PUT _ilm/policy/openstack-log-30
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_age": "15d",
            "max_primary_shard_size": "50gb"
          }
        }
      },
      "delete": {
        "min_age": "15d",
        "actions": {
          "delete": {
          }
        }
      }
    }
  }
}

## 查看是否创建成功
GET /_ilm/policy/openstack-log-30

## 删除
DELETE /_ilm/policy/openstack-log-30

2、创建索引模板,模板中关联 policy

## 引用官方,实际示例在下面
PUT _index_template/timeseries_template
{
  "index_patterns": ["timeseries-*"],    # 如果模板的名称以 开头,则将模板应用于新索引。timeseries-     
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1,
      "index.lifecycle.name": "timeseries_policy",     # 要应用于每个新索引的生命周期策略的名称   
      "index.lifecycle.rollover_alias": "timeseries"     #  用于引用这些索引的别名的名称。 对于使用滚动更新操作的策略是必需的
    }
  }
}

### 使用
PUT /_index_template/network-logs
{
  "index_patterns": ["network-logs"], 
  "template": {
    "settings": {
      "index": {
        "number_of_replicas": 0,
        "lifecycle.name": "openstack-log-30", 
        "lifecycle.rollover_alias": "network-logs"
      }
    }
  },
  "priority": 100, 
  "version": 1 
}

3、创建符合模板的起始索引,设置别名(即我们统一对外提供服务的索引名)

#创建<index_name>索引,支持rollover的时候index名称附加年月日时分秒(将url及json里面的<index_name>替换为对应索引名)
PUT /%3C<index_name>-%7Bnow%2Fm%7Byyyy.MM.dd.HH.mm%7CAsia%2FShanghai%7D%7D-000001%3E
{
    "aliases":{
        "<index_name>":{
            "is_write_index":true
        }    
    }
}

## 实际使用
PUT /%3Cpcsp_log_record-%7Bnow%2Fm%7Byyyy.MM.dd.HH.mm%7CAsia%2FShanghai%7D%7D-000001%3E
{
    "aliases":{
        "pcsp_log_record":{
            "is_write_index":true
        }    
    }
}

4、测试

按以上设置完成后就可以查看
测试插入数据:

POST /pcsp_log_record/_doc
 { 
 "name": "王者荣耀1", 
 "age": 19, 
 "address": "长沙岳麓山"
 }

GET /my_cas_history_logs/_search

5、简易模式

# 1、创建生命周期策略,此时没有创建 rollover 操作
PUT _ilm/policy/openstack-log-30
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {
          }
        }
      }
    }
  }
}

# 2、创建索引模板,没有创建 lifecycle.rollover_alias
PUT /_index_template/network-logs
{
  "index_patterns": ["network-logs-*"], 
  "template": {
    "settings": {
      "index": {
        "number_of_replicas": 0,
        "lifecycle.name": "openstack-log-30"
      }
    }
  },
  "priority": 100, 
  "version": 1 
}

# 3、可以直接创建索引验证
POST /network-logs-abcd/_doc
{
  "name": "test"
}

6、对已有索引添加生命周期策略

需要注意的是:对已有索引添加生命周期策略时,如果索引存在的时间已经超过了策略中的 min_age 定义的值,索引则会被删除。不过需要等一段时间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 查看
GET /openstack-first-prodution-10.0.31.10-2024.06/_ilm/explain
### 输出如下:
{
  "indices" : {
    "openstack-first-prodution-10.0.31.10-2024.06" : {
      "index" : "openstack-first-prodution-10.0.31.10-2024.06",
      "managed" : true,
      "policy" : "openstack-log-30", ### 策略
      "index_creation_date_millis" : 1717294821838,
      "time_since_index_creation" : "3.25d",    # 索引创建多久了
      "lifecycle_date_millis" : 1717294821838,
      "age" : "3.25d",
      "phase" : "hot",    # 所处的阶段
      "phase_time_millis" : 1717575620273,
      "action" : "complete",
      "action_time_millis" : 1717575620073,
      "step" : "complete",
      "step_time_millis" : 1717575620273,
      "phase_execution" : {
        "policy" : "openstack-log-30",
        "phase_definition" : {
          "min_age" : "0ms",
          "actions" : { }
        },
        "version" : 2,
        "modified_date_in_millis" : 1717573130448
      }
    }
  }
}

## 下面是另一个索引,索引创建时间超过 生命周期策略中的 min_age
GET /network-logs-2024.01.01/_ilm/explain
#### 输出
{
  "indices" : {
    "network-logs-2024.01.01" : {
      "index" : "network-logs-2024.01.01",
      "managed" : true,
      "policy" : "openstack-log-30",
      "index_creation_date_millis" : 1704067209059,
      "time_since_index_creation" : "156.34d",
      "lifecycle_date_millis" : 1704067209059,
      "age" : "156.34d",
      "phase" : "delete",    # 处于delete阶段
      "phase_time_millis" : 1717575805167,
      "action" : "delete",
      "action_time_millis" : 1717575805167,
      "step" : "wait-for-shard-history-leases",
      "step_time_millis" : 1717575805167,
      "phase_execution" : {
        "policy" : "openstack-log-30",
        "phase_definition" : {
          "min_age" : "30d",
          "actions" : {
            "delete" : {
              "delete_searchable_snapshot" : true
            }
          }
        },
        "version" : 2,
        "modified_date_in_millis" : 1717573130448
      }
    }
  }
}

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

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

相关文章

无人机操控师技术及前景详解

随着科技的飞速发展和无人机技术的日益成熟&#xff0c;无人机在各行各业的应用越来越广泛&#xff0c;从农业植保、物流配送到影视拍摄、灾害救援&#xff0c;无人机技术正深刻改变着传统行业的运作模式。在这一背景下&#xff0c;无人机操控师作为无人机技术的核心操作者&…

Oracle查询优化--分区表建立/普通表转分区表

本文介绍了Oracle表分区的方法&#xff0c;将已有的非分区表转化为分区表&#xff0c;也可以直接建立新的分区表&#xff0c;从而实现大表查询的优化。主要通过DBMS_REDEFINITION 和 alter table xxx modify 方法&#xff0c;DBMS_REDEFINITION 适用于所有版本&#xff0c;操作…

Spring扩展点系列-InitializingBean

文章目录 简介应用场景代码示例运行示例 简介 这篇文章主要介绍了Spring中InitializingBean的使用详细解析&#xff0c;InitializingBean是Spring提供的拓展性接口&#xff0c;提供了属性初始化后的处理方法,它只有一个afterPropertiesSet方法&#xff0c;凡是继承该接口的类&…

8G 显存玩转书生大模型

1. 启动demo 输出300字小故事 2. Streamlit Web Demo 部署InternLM2-Chat-1.8B 模型 安装依赖 让他输出helloworld

java基础 之 接口

文章目录 前言接口浅浅理解下接口抽象类与接口的爱恨情仇特点接口的回调 抽象类和接口相同之处区别 前言 前文回顾 戳这里→java基础 之 抽象类 因为接口是对抽象类的一种延伸&#xff0c;所以请先了解一下抽象类会更好的理解接口哦 子类对抽象类叫继承&#xff0c;使用关键字e…

Python 从入门到实战3(列表的简单操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过python小栗子来学习python基础知识语法&#xff…

怎样还原空白试卷?2024快速空白试卷还原软件合集

怎样还原空白试卷&#xff1f;2024快速空白试卷还原软件合集 在教育和考试过程中&#xff0c;有时需要将已经填写过的试卷还原为空白状态&#xff0c;以便重新使用或进行复印。通过使用特定的软件&#xff0c;你可以轻松地去除试卷上的手写内容或标记&#xff0c;恢复试卷的空…

【网络安全 | 虚拟机】VMware Workstation Pro下载安装使用教程(免费版)

未经许可,不得转载。 文章目录 下载安装使用(Centos)下载 进入官网页面,注册账户: https://profile.broadcom.com/web/registration注册后登录(用户名为邮箱),选择My Downloads: 如图选择: 如图选择: 如图选择: 如图选择:

嵌入式Linux C应用编程指南-进程、线程(速记版)

第九章 进程 9.1 进程与程序 9.1.1 main()函数由谁调用&#xff1f; C 语言程序总是从 main 函数开始执行&#xff0c;main()函数的原型是&#xff1a; int main(void) 或 int main(int argc, char *argv[])。 操作系统下的应用程序在运行 main()函数之前需要先执行一段引导代…

性能炸裂的数据可视化分析工具:DataEase!【送源码】

今天分享一款开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便地与他人分享。 技术栈 前端&#xff1a;Vue.js、Elemen…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别&#xff1a;② 正向代理 / 反向代理 服务器 1. 前言 NAT&#xff08;网络地址转换&#xff09;是一种常见…

路由策略工具

1.产生背景 a.保证数据访问的安全性 b.提高链路带宽利用率 c.流量路径不优 2.解决方案: 解决方案一:路由策略:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性 解决方案二:流量过滤:可使用Traffic-Filter工具对数据直接进行过滤 3.路由策略工具 a.可利…

登录究竟有多少种花样?

写在最前面&#xff1a; 大家好&#xff0c;我是小....小白不黑&#xff0c;现在的app以及任何一个系统&#xff0c;都离不开登录。其中最常见的估计就是密码登录&#xff0c;二维码登录&#xff0c;第三方账号登录以及单点登录了。 现在&#xff0c;让我们来捋一捋&#xff…

【virtuoso】INV 原理图+前仿真 + 版图 + 后仿真

采用SMIC工艺&#xff0c;不同工艺版图窗口可能有差异 1. 原理图&前仿真 1.1 绘制原理图 PMOS: NMOS宽长比2&#xff1a;1 PMOS开启导通电阻大一点&#xff0c;这样设置&#xff0c;可以使得阈值电压是VDD/2 按 i&#xff0c;可以插入器件按p&#xff0c;可以放置端口 1.2…

AXIS接口教程

免责声明&#xff1a; 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

Unity3D安卓游戏第三方SDK接入

PS&#xff1a;持续更新... 什么是SDK&#xff1f; SDK&#xff08;Software Development Kit&#xff0c;软件开发工具包&#xff09;是一个用于构建应用程序的工具集&#xff0c;包含开发特定软件的必要工具、库、文档和示例代码。SDK通常由软件或硬件厂商提供&#xff0c;帮…

MySQL高阶练习题1- 寻找面试候选人

目录 题目 准备数据 分析数据 实现代码 总结 题目 返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 &#xff0c;其成为 面试候选人 : 该用户在 连续三场及更多 比赛中赢得 任意 奖牌。该用户在 三场及更多不同的 比赛中赢得 金牌&…

Linux——用户和权限

root用户&#xff08;超级管理员&#xff09; root用户拥有最大的系统操作权限&#xff0c;而普通用户在许多地方的权限是受限的。 ****************** 使用普通用户在根目录下创建文件夹 切换到root用户后&#xff0c;继续尝试 普通用户的权限&#xff0c;一般在其HOME目录…

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题

【linxu】虚拟环境中Python 版本错乱&#xff1a;深入探究 Linux 虚拟环境的识别问题 问题描述&#xff1a;在服务器上&#xff0c;我配置了一个虚拟环境&#xff0c;明确指定使用 Python 3.8 版本。然而&#xff0c;当我激活该环境并检查 Python 版本时&#xff0c;意外地发现…

IO练习--随机点名

随机点名器1 需求: 有一个文件里面存储了班级同学的信息&#xff0c;每一个信息占一行。 格式为:张三-男-23 要求通过程序实现随机点名器。 运行效果: 第一次运行程序:随机同学姓名1(只显示名字) 第二次运行程序:随机同学姓名2(只显示名字) 第三次运行程序:随机同学姓名3(只显…