## 一、介绍
`Elastic Stack 6.6`版本后推出了新功能`Index Lifecycle Management(索引生命周期管理)`,支持针对索引的全生命周期托管管理,并且在`Kibana`上也提供了一套 UI 界面来配置策略。
## 二、生命周期
### 2.1. 阶段介绍
索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作。
> rollover:滚动更新创建的新索引将添加到索引别名,并被指定为写索引。
> 4个阶段中只有hot阶段是必须的
![](https://img.kancloud.cn/8a/9c/8a9c9f53fe389056fdbc8e00b9d5f427_1636x600.png)
索引根据时间参数min\_age进入生命周期阶段,若未设置,默认是0ms。min\_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min\_age是从索引滚动开始计算。注意,在检查min\_age参数并进入下一个阶段前,当前阶段的操作必须完成。
### 2.2. 阶段动作
| 阶段/action | 优先级设置 | 取消跟随 | 滚动索引 | 分片分配 | 只读 | 强制段合并 | 收缩索引 | 冻结索引 | 删除 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| hot | √ | √ | √ | × | × | × | × | × | × |
| warm | √ | √ | × | √ | √ | √ | √ | × | × |
| cold | √ | √ | × | √ | × | × | × | √ | × |
| delete | × | × | × | × | × | × | × | × | √ |
### 2.3. 例子
下面以索引`syslog-2020.10.01`为例子,在索引创建 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除
| 日期 | 动作 | 阶段 |
| --- | --- | --- |
| 2020-10-01 | 创建索引`syslog-2020.10.01`,处理读写请求 | hot阶段 |
| 2020-10-02 | `syslog-2020.10.01`改为只读 | warm阶段 |
| 2020-11-01 | `syslog-2020.10.01`为只读,并迁移到冷节点储存 | cold阶段 |
| 2020-12-01 | 删除索引`syslog-2020.10.01` | delete阶段 |
## 三、模拟过程
### 3.1. 创建索引生命周期策略
假设`Policy`设定如下:
* 索引以每10个文档做一次`Rollover`
* `Rollover`后 5 秒转为`Warm`阶段
* `Rollover`后 20 秒转为`Cold`阶段
* `Rollover`后 40 秒删除
~~~
curl -XPUT "http://$IP:9200/_ilm/policy/my_ilm_policy" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": "10"
}
}
},
"warm": {
"min_age": "5s",
"actions": {
"allocate": {
"include": {
"box_type": "warm"
}
}
}
},
"cold": {
"min_age": "20s",
"actions": {
"allocate": {
"include": {
"box_type": "cold"
}
}
}
},
"delete": {
"min_age": "40s",
"actions": {
"delete": {}
}
}
}
}
}'
~~~
> ip、用户名和密码按实际情况修改
### 3.2. 关联策略
关联策略有两种方式,分别是使用索引模板关联和索引直接关联
#### 3.2.1. 索引模板关联
索引模板来创建所需的索引,并关联ilm策略
~~~
curl -XPUT "http://$IP:9200/_template/my_test_template" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"index_patterns": ["my-test-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index.lifecycle.name": "my_ilm_policy",
"index.lifecycle.rollover_alias": "my-test",
"index.routing.allocation.include.box_type": "hot"
}
}'
~~~
> ip、用户名和密码按实际情况修改
> [index.lifecycle.name](http://index.lifecycle.name/):指明该索引应用的 ILM Policy
> index.lifecycle.rollover\_alias:指明在 Rollover 的时候使用的 alias
> index.routing.allocation.include.box\_type:指明新建的索引都分配在 hot 节点上
#### 3.2.2. 索引直接关联
为现有的索引单独关联策略
~~~
curl -XPUT "http://$IP:9200/my-test-*/_settings" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"index": {
"lifecycle": {
"name": "my_ilm_policy"
}
}
}'
~~~
> ip、用户名和密码按实际情况修改
### 3.3. 查看索引所处阶段
~~~
http://$IP:9200/my-test-*/_ilm/explain
~~~
### 3.4. 更新策略
1. 如果没有index应用这份策略,那么我们可以直接更新该策略。
2. 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
3. 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。
### 3.5. kibana图形化操作
上述的步骤,大部分都可以在`Kibana`中以图形化界面的方式进行操作
![](https://img.kancloud.cn/72/06/7206aaf542448c60af806d414bc00491_1524x594.png)
![](https://img.kancloud.cn/9b/72/9b72f42d047742f28fce68c129e17e84_1329x882.png)
> 注意:如果使用图形化界面来创建策略,删除阶段会缺失`actions`内容而导致无法删除
## 四、修改轮询间隔(可选)
ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了测试更快地看到效果,可将其修改为1秒。
~~~
curl -XPUT "http://$IP:9200/_cluster/settings" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"persistent": {
"indices.lifecycle.poll_interval":"1s"
}
}'
~~~
> ip、用户名和密码按实际情况修改
## 五、启动和停止索引生命周期管理
> ILM 默认开启
由ILM管理的所有索引将继续执行其策略。有时可能不需要某些索引,甚至集群中的所有索引都不需要。例如,当需要集群拓扑更改时,可能会有计划的维护窗口,这可能会影响正在运行的ILM操作。因此,ILM有两种禁用操作的方法。
停止ILM时,快照生命周期管理操作也会停止,这意味着不会创建计划的快照(当前正在进行的快照不受影响)。
通常,ILM将默认运行。要查看ILM的当前运行状态,请使用[Get Status API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-status.html)来查看ILM的当前状态。
~~~
GET _ilm/status
~~~
如果请求没有遇到错误,您将收到以下结果:
~~~
{
"operation_mode": "RUNNING"
}
~~~
**ILM的操作模式**:
| 阶段/action | 优先级设置 |
| --- | --- |
| 正在运行 | 正常运行,所有策略均正常执行 |
| 停止 | ILM已收到停止请求,但仍在处理某些策略 |
| 已停止 | 这表示没有执行任何策略的状态 |
### 5.1. 停止ILM
可以暂停ILM服务,以便使用[Stop API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-stop.html)不再执行其他步骤。
~~~
POST _ilm/stop
~~~
停止后,所有其他政策措施都将停止。这将反映在状态API中
~~~
{
"operation_mode": "STOPPING"
}
~~~
然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该`STOPPED`模式
~~~
{
"operation_mode": "STOPPED"
}
~~~
### 5.2. 启动ILM
要启动ILM并继续执行策略,请使用[Start API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-start.html)。
~~~
POST _ilm/start
~~~
Start API将向ILM服务发送请求,以立即开始正常操作。
~~~
{
"operation_mode": "RUNNING"
}
~~~
## 六、API清单
您可以使用以下API来管理索引策略。有关更多信息,请参阅[管理索引生命周期](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/index-lifecycle-management.html)。
* 政策管理API
* [创建生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-put-lifecycle.html)
* [获取生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-lifecycle.html)
* [删除生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-delete-lifecycle.html)
* 索引管理API
* [将索引移至步骤](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-move-to-step.html)
* [重试索引策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-retry-policy.html)
* [从索引中删除策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-remove-policy.html)
* 运营管理API
* [获取ILM操作模式](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-status.html)
* [启动ILM](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-start.html)
* [停止ILM](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-stop.html)
* [解释API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-explain-lifecycle.html)
- springcloud
- springcloud的作用
- springboot服务提供者和消费者
- Eureka
- ribbon
- Feign
- feign在微服务中的使用
- feign充当http请求工具
- Hystrix 熔断器
- Zuul 路由网关
- Spring Cloud Config 分布式配置中心
- config介绍与配置
- Spring Cloud Config 配置实战
- Spring Cloud Bus
- gateway
- 概念讲解
- 实例
- GateWay
- 统一日志追踪
- 分布式锁
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安装
- 1.2 特性
- 1.3 实例
- 1. 整合nacos服务发现
- 2. 整合nacos配置功能
- 1.4 生产部署方案
- 环境隔离
- 原理讲解
- 1. 服务发现
- 2. sentinel
- 3. Seata事务
- CAP理论
- 3.1 安装
- 分布式协议
- 4.熔断和降级
- springcloud与alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服务框架付费
- SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志清理
- 统一日志中心
- docker安装部署
- 安装部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定时清理数据
- index Lifecycle Management
- 没数据排查思路
- ELK自身组件监控
- 多租户方案
- 慢查询sql
- 日志审计
- 开发
- 登录认证
- 链路追踪
- elk
- Filebeat
- Filebeat基础
- Filebeat安装部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安装
- rpm安装
- docker安装Logstash
- grok调试
- Grok语法调试
- Grok常用表达式
- 配置中常见判断
- filter提取器
- elasticsearch
- 安装
- rpm安装
- docker安装es
- 使用
- 概念
- 基础
- 中文分词
- 统计
- 排序
- 倒排与正排索引
- 自定义dynamic
- 练习
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- kibana
- 安装
- docker安装
- rpm安装
- 整合
- 收集日志
- 慢sql
- 日志审计s
- 云
- 分布式架构
- 分布式锁
- Redis实现
- redisson
- 熔断和降级