主 题
前言
ES从6.7版本推出了索引生命周期管理(Index Lifecycle Management ,简称ILM)机制,能帮我们自动管理一个索引策略(Policy)下索引集群的生命周期。索引策略将一个索引的生命周期定义为四个阶段:
索引生命周期分为四个阶段:HOT(热)=>WARM(温)=》COLD(冷)=>DELETE(删除)
- Hot:索引可写入,也可查询。
- Warm:索引不可写入,但可查询。
- Cold:索引不可写入,但很少被查询,查询的慢点也可接受。
- Delete:索引可被安全的删除。
每个阶段都可以配置不同的转化行为(Action) - Rollover 当写入索引达到了一定的大小,文档数量或创建时间时,Rollover可创建一个新的写入索引,将旧的写入索引的别名去掉,并把别名赋给新的写入索引。所以便可以通过切换
别名控制写入的索引是谁。它可用于Hot阶段。 - Shrink 减少一个索引的主分片数,可用于Warm阶段。需要注意的是当shink完成后索引名会由原来的变为shrink-.
- Force merge 可触发一个索引分片的segment merge,同时释放掉被删除文档的占用空间。用于Warm阶段。
- Allocate 可指定一个索引的副本数,用于warm, cold阶段。
1.配置生命周期策略(policy)
创建一个自动删除策略(xxx-service-auto-delete-policy )
delete:删除阶段,45天执行删除索引动作
查看策略:GET _ilm/policy/
#创建日志超过45天自动删除生命周期策略/修改生命周期-或者kibana 界面直接修改
PUT _ilm/policy/factory-service-auto-delete-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "25GB"
}
}
},
"delete": {
"min_age": "45d",
"actions": {
"delete": {}
}
}
}
}
}
#生命周期全阶段策略
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
//rollover前距离索引的创建时间最大为7天
"max_age": "7d",
//rollover前索引的最大大小不超过50G
"max_size": "50G",
//rollover前索引的最大文档数不超过1个(测试用)
"max_docs": 1,
}
}
},
"warm": {
//rollover之后进入warm阶段的时间不小于30天
"min_age": "30d",
"actions": {
"forcemerge": {
//强制分片merge到segment为1
"max_num_segments": 1
},
"shrink": {
//收缩分片数为1
"number_of_shards": 1
},
"allocate": {
//副本数为2
"number_of_replicas": 2
}
}
},
"cold": {
//rollover之后进入cold阶段的时间不小于60天
"min_age": "60d",
"actions": {
"allocate": {
"require": {
//分配到cold 节点,ES可根据机器资源配置不同类型的节点
"type": "cold"
}
}
}
},
"delete": {
//rollover之后进入cold阶段的时间不小于60天
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
2.创建索引模板
创建索引模板(*_tempalte),index.lifecycle.name把上面的自动删除策略绑定到elk索引模板
创建factory-service-*开头的索引时就会应用这个模板。
indexing_complete:true,必须设为true,跳过HOT阶段的Rollover
查看模板:GET /_template/
# 创建索引模板
PUT _template/factory-service-template
{
"index_patterns": ["factory-service-*"],
"settings": {
"index":{
"lifecycle":{
"name":"factory-service-auto-delete-policy",
"indexing_complete":true
}
}
}
}
#正常的生命周期模板设置
PUT _template/factory-service-template
{
//模版匹配的索引名以"index-"开头
"index_patterns": ["factory-service-*"],
"settings": {
//索引分片数为2
"number_of_shards":2 ,
//索引副本数为1
"number_of_replicas": 1,
//索引使用的索引策略为factory-service-auto-delete-policy
"index.lifecycle.name": "factory-service-auto-delete-policy",
//索引rollover后切换的索引别名为 factory-service-index
"index.lifecycle.rollover_alias": "factory-service-index"
}
}
#查看py-service* 下面生命周期策略 以及执行状态-失败原因step_info
GET py-service*/_ilm/explain
#更新索引策略,解决问题。然后在重试让ILM继续执行下一步
POST /py-service-/_ilm/retry
#生命周期策略默认检测修改 一般默认10分钟
PUT /_cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"30m"
}
}
ES扩展信息Logstash使用ILM
Logstash的Elasticsearch output plugin插件自从9.3.1版本之后就支持ILM了,我们只需要在Logstash的配置文件中简单配置下就可以全部托管给ES ILM了。
output {
elasticsearch {
//发生rollover时的写入索引的别名
ilm_rollover_alias => "factory-service"
//将会附在ilm_rollover_alias的值后面共同构成索引名,myindex-00001
ilm_pattern => "%{+YYYY.MM.dd}"
//使用的索引策略
ilm_policy => "factory-service-auto-delete-policy"
//使用的索引模版名称
template_name => "factory-service-template"
}
}
#切换索引使用的索引策略,可以使用API进行修改:
PUT indexName/_settings
{
"lifecycle.name": "factory-service-auto-delete-policy"
}
全部评论(0)