统一日志中心关键设计揭秘 -索引生命周期管理

团队介绍

我们是光大科技有限公司智能云计算部云计算团队容器云项目组,致力于容器技术在金融行业的落地与实践,以容器云助力金融行业科技转型。我们的团队拥有经验丰富的容器与云原生领域研发工程师和专家,将不定期分享容器和云原生行业的原创技术文章和实践经验,共同探索与见证云原生时代金融领域的前沿技术和发展趋势。

//////////////////////

统一日志中心是高效的日志收集和分析系统,可以提供实时日志查询以及海量的日志存储。EFK作为日志中心的常用架构,其中的Elasticsearch占据着重要的地位。

由于章节有限,本文主要介绍Elasticsearch的索引生命周期管理功能。

Elasticsearch介绍

Elasticsearch是一个开源的分布式、RESTful风格的搜索和数据分析引擎,可用于时序数据(如日志、监控数据)的管理和存储。对于一个全文搜索引擎来说,索引是灵魂。

这里先了解下什么是索引。索引(index)是具有相似特性的文档(Document)集合,索引就相当于MySQL中的数据库,文档相当于MySQL中的表。日志数据可以通过索引名称进行标识,并引用索引名称完成日志数据的创建、搜索、更新及删除操作。

提到日志管理,不得不说“hot-warm-cold”分层体系架构,该架构常用于日志或指标类的时序数据,将节点分为hot、warm、cold节点。hot节点存放用户最关心的热数据,提供数据写入和查询;warm节点或cold节点存放用户不太关心或者关心优先级低的暖数据或冷数据,仅提供数据查询不再写入数据。这样做可以合理分配资源,如CPU、内存、硬盘,提高数据查询效率。这种架构实现的本质是对索引的管理。

所以说,在海量数据场景下,索引管理是非常有必要,同时也是非常有挑战性的事情。而索引的管理可以交给ES的索引生命周期管理功能。

索引生命周期管理介绍

统一日志中心关键设计揭秘 -索引生命周期管理

索引生命周期管理(Index Lifecycle Management,ILM),是在ES 6.6首次引入并在6.7版正式推出的一项功能,负责索引从设置、创建、打开、关闭到删除的全生命周期过程的管理。比如,我们可以使用ILM执行以下操作:

  • 当某索引达到一定容量或日志条数后,创建新索引;

  • 按时间(每天、每周或每月)创建一个新索引并归档先前的索引;

  • 删除旧索引以执行数据保留策略。

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

  • Hot:主要处理数据的实时写入和索引查询;

  • Warm:不再写入数据,但仍提供查询;

  • Cold:不再写入数据,提供很少的查询;

  • Delete:不再写入数据,数据将被删除。

索引生命周期管理场景举例

统一日志中心关键设计揭秘 -索引生命周期管理

生命周期最多可以有四个阶段:hot、warm、cold和delete。生命周期管理的创建可以通过ILM API创建,也可以通过Kibana界面进行配置。

下面举例一个简单的场景:在hot、delete两个阶段进行配置,使索引在hot阶段保留15天后进入delete阶段,然后delete阶段再保留15天后删除索引,即索引保留30天。

在整个过程中会涉及到以下三个步骤:

  • 创建生命周期策略:指定索引生命周期中各个阶段以及每个阶段要执行的操作。

  • 创建索引模板:定义索引模式,设置该索引使用的生命周期策略,以及在hot阶段执行Rollover操作时要更新的索引别名。

  • 将策略应用于索引:使生命周期策略在指定索引上生效。

创建生命周期策略

在hot阶段,Rollover操作的依据有三种:

  • max_age:在当前阶段索引保留最长时间;

  • max_size:在当前阶段索引保留最大大小;

  • max_docs:在当前阶段索引保留最多日志条数。

通过API创建:

PUT _ilm/policy/test_policy{  \"policy\": {    \"phases\": {      \"hot\": {                             \"actions\": {          \"rollover\": {               \"max_age\": \"15d\"          }        }      },      \"delete\": {        \"min_age\": \"15d\",                  \"actions\": {          \"delete\": {}                     }      }    }  }}

通过Kibana界面配置:

打开Kibana–>管理–>索引生命周期策略–>创建策略,然后填写相关项。

统一日志中心关键设计揭秘 -索引生命周期管理

图片截自Kibana

创建索引模板

接下来需要将上述策略与索引模板关联起来,然后创建索引时使用该索引模板。如果不进行关联,而是将策略直接应用到索引,那么策略中rollover操作执行时创建的新索引就会无法沿用指定的策略。

通过API创建:

PUT _index_template/test_template{  \"index_patterns\": [\"test-*\"],                  \"template\": {    \"settings\": {      \"number_of_shards\": 1,      \"number_of_replicas\": 1,      \"index.lifecycle.name\": \"test_policy\",           \"index.lifecycle.rollover_alias\": \"test\"       }  }}

通过Kibana界面配置:

打开Kibana–>管理–>索引管理–>索引模板–>创建模板,然后填写相关项。

统一日志中心关键设计揭秘 -索引生命周期管理

图片截自Kibana

将策略应用于索引

等待索引模板创建完毕后,还需要创建一个初始索引,并将其指定为索引模板中rollover_alias的写索引。该索引的名称必须与模板的索引模式匹配,并以数字结尾。Rollover时,此值将递增以生成新索引的名称。

PUT test-000001{  \"aliases\": {    \"test\": {      \"is_write_index\": true    }  }}

在这个索引test-000001创建15天之后,就会触发rollover,将旧数据定义到delete阶段,然后新建一个索引test-000002,再过15天之后,test-000002进入delete阶段,并新建test-000003,test-000001会被删除,如此循环下去。

索引生命周期管理策略涉及到的操作

统一日志中心关键设计揭秘 -索引生命周期管理

索引生命周期管理策略指定了适用于哪些阶段,在每个阶段中执行了哪些操作以及何时在各个阶段之间进行转换。索引生命周期管理的各阶段允许的操作如下:

操作阶段

Hot

Warm

Cold

Delete

Allocate

_

_

Delete

_
_
_

Force merge

_
_

Freeze

_
_

_

Migrate

_

_

Read only

_

_
_

Rollover

_
_
_

Set priority

_

Shrink

_

_
_

Unfollow

_

Wait for snapshot

_
_
_

Searchable snapshot

_
_

_

以上操作简单介绍如下:

  • Allocate:将分片移动到具有不同性能特征的节点,并减少副本的数量。

  • Delete:永久删除索引。

  • Force merge:减少索引段的数量并清除已删除的文档,使索引为只读。

  • Freeze:冻结索引以最小化其内存占用量。

  • Migrate:将索引分片移动到与当前{ilm-init]阶段相对应的数据层。

  • Read only:阻止对索引的写操作。

  • Rollover:删除索引为rollover alias的写索引,然后开始索引到新索引。

  • Set priority:降低索引在生命周期中的优先级,以确保首先恢复热索引。

  • Shrink:通过缩小索引减少主分片的数量进入新索引。

  • Unfollow:将关注者索引转换为常规索引。在rollover、shrink、searchable snapshot操作之前自动执行。

  • Wait for snapshot:删除索引之前,确保快照已存在。

  • Searchable snapshot[beta]:为配置的存储库中的托管索引拍摄快照,并将其作为可搜索快照。

启动和停止索引生命周期管理

统一日志中心关键设计揭秘 -索引生命周期管理

默认情况下,ILM服务处于RUNNING状态,并管理具有生命周期策略的所有索引。

  • 查看ILM服务的当前状态

    GET _ilm/status,在正常操作下,响应显示ILM为RUNNING:\”operation_mode\”: \”RUNNING\”。

  • 停止ILM服务

    POST _ilm/stop,ILM服务会将所有策略运行到可以安全停止的地步。当ILM服务关闭时,状态API显示ILM处于STOPPING模式:\”operation_mode\”: \”STOPPING\”;一旦所有策略都处于安全停止点,ILM就会进入STOPPED模式:\”operation_mode\”: \”STOPPED\”。

  • 重新启动ILM并恢复执行策略

    POST _ilm/start,将ILM服务置于RUNNING状态,并且ILM从中断处开始执行策略。

随着容器云原生技术的快速发展,日志是其必不可少的一环。ES作为日志处理的首选,功能强大,其本身又很复杂,而ILM只是其功能之一,需要持续投入精力研究,欢迎技术爱好者一起交流。

往期回顾

统一日志中心关键设计揭秘 -索引生命周期管理

漫谈Redis与缓存

统一日志中心关键设计揭秘 -索引生命周期管理

企业级监控管理平台建设内幕

统一日志中心关键设计揭秘 -索引生命周期管理

CPU虚拟化

统一日志中心关键设计揭秘 -索引生命周期管理

云合景从,学无止境——光大科技企业智慧教育整体解决方案

扫码关注我们

作者|郭瑞存

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/32788.html

(0)
EBCloud's avatarEBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注