2021-11-09

一.索引生命周期 ILM(index lifecycle management)

1、功能
我们通过beat、logstash等组件向es不断写入数据。如果任凭其发展会导致存储的日志数据越来越多。而我们常索引的数据一般是近期的热点数据。一般性的策略是创建带日期的索引,然后根据需要进行删除。而在Kibana中提供了这样一种特性。即定义随着索引存活时间的增长对索引的不同策略。一般是Hot-Warm-Cold。当索引达到一定的大小后会自动进行滚动(滚动在宏观上应该可以理解为删掉旧数据,存入新数据)。保证索引在一定的大小,而非每日创建一个索引。

2.ILM使用步骤
创建生命周期策略,定义索引不同的生命阶段以及对应的action。
2. 创建索引模板以应用上面的策略到新的索引。
3.引导一个索引作为初始的写入索引。
4.验证生命周期策略执行的正确与否。

注意:filebeat是自带一个ILM的。(50G or 30天 ==> 进行rollover操作)
rollover操作:也算一种很常见的操作。比如在像一个文件中写数据时,当该文件达到某个条件后(如达到某个大小),停止向该文件写入,创建新的文件取代旧文件(使用旧文件的名字,旧文件一般在原先的名字上加后缀)。
这样的操作会循环往复,从而产生多个旧文件,一般旧文件到一定的数目后,老的就会被删除。

详细描述:
(1)创建生命周期策略
一个生命周期班包含四个阶段:hot warm cold delete。可以根据需要选择阶段定义该阶段对应的操作
curl -X PUT “localhost:9200/_ilm/policy/datastream_policy?pretty” -H ‘Content-Type: application/json’ -d’
{
“policy”: {
“phases”: {
“hot”: {
“actions”: {
“rollover”: {
“max_size”: “50GB”,
“max_age”: “30d”
}
}
},
“delete”: {
“min_age”: “90d”,
“actions”: {
“delete”: {}
}
}
}
}
}

#在kibana控制台中使用 PUT _ilm/policy/datastream_policy 加上后面的json即可。


上述的配置中定义了两个生命周期阶段,hot和delete。
hot阶段的min_age默认为0,即默认新的索引直接进入hot阶段。满足rollover的条件之一即进行rollover。
在rollover的90天后即进入delete阶段。进入该阶段即被删除。
每一个生命周期可以做的actions的完整列表:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/ilm-actions.html

(2)创建索引模板来应用生命周期策略
为了能在导入新索引时自动匹配对应的生命周期策略。还需要创建匹配索引模板来制定新索引和生命周期策略的匹配规则。
为了能顺利匹配已实现rollover操作,模板一般要配置以下两条ILM设置:
index.lifecycle.name :指定要使用的生命周期策略。
index.lifecycle.rollover_alias 指定索引的别名,即rollover操作中新的索引会使用的名字。实际上我们输入中(如logstash)中定义的索引名字应与pattern匹配。
curl -X PUT “localhost:9200/_template/datastream_template?pretty” -H ‘Content-Type: application/json’ -d’
{
“index_patterns”: [“datastream-"],
“settings”: {
“number_of_shards”: 1,
“number_of_replicas”: 1,
“index.lifecycle.name”: “datastream_policy”,
“index.lifecycle.rollover_alias”: “datastream”
}
}

(3)引导初始的时间序列索引
配置写好后,准备导入初始的索引。该索引名必须与我们上面的模板定义的index_patterns相匹配,且必须以数字结尾。
curl -X PUT “localhost:9200/datastream-000001?pretty” -H ‘Content-Type: application/json’ -d’
{
“aliases”: {
“datastream”: { #注意别名与上面设置的对应起来
“is_write_index”: true
}
}
}

当达到rollover的条件时:
创建一个datastream-000002的索引,它也是满足模板上的索引模式的,定义的规则也适应它。
指定这个新的索引作为写索引,而创世索引设置为read_only。
(4)检查生命周期进程的状态
使用api即可。通过调用api的结果我们可以看到:
当前所以所处的生命周期阶段,以及何时进入该状态。
当前所在进行的action
错误信息
For example:
curl -X GET "localhost:9200/datastream-
/_ilm/explain?pretty”
返回的response:
这个response说明创世index正在等待hot阶段的rollover action。它保持在该状态,而ILM会调用attemp-rollover,看是否达到rollover的条件。
{
“indices”: {
“datastream-000001”: {
“index”: “datastream-000001”,
“managed”: true,
“policy”: “datastream_policy”,
“lifecycle_date_millis”: 1538475653281,
“age”: “30s”, # index的age
“phase”: “hot”,
“phase_time_millis”: 1538475653317,
“action”: “rollover”,
“action_time_millis”: 1538475653317,
“step”: “attempt-rollover”, #所处的阶段
“step_time_millis”: 1538475653317,
“phase_execution”: {
“policy”: “datastream_policy”,
“phase_definition”: {
“min_age”: “0ms”,
“actions”: {
“rollover”: {
“max_size”: “50gb”,
“max_age”: “30d”
}
}
},
“version”: 1,
“modified_date_in_millis”: 1539609701576
}
}
}
}


常见的错误及解决办法:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-error-handling.html


错误:
1.Unexpected token u in JSON at position 0 at JSON.parse ()

原因:请求超时错误
修改策略: 提高请求超时的时间。修改kibana的配置,kibana安装路径下config/ kibana.yml
的elasticsearch.requestTimeout。默认30s,改成了60s。
参考网址:https://discuss.elastic.co/t/error-loading-data/220160

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值