暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

基于 Elasticsearch 的索引生命周期管理策略调整与优化

996

一、背景描述

同事反馈,Elasticsearch(ES)接入的某个数据治理业务索引生命周期过短。当前使用的策略是保留21天,这不方便 Grafana 的展示需求。希望将该索引的生命周期延长,例如保留一年。

该业务不像其他按日或月生成索引的业务,由于前端写入的限制,该业务只生成一个包含所有数据的索引。

image.png

该索引对应业务也仅仅是偶尔使用,每天产生的日志信息也很少,单个索引量比较小,估算了下,保存一年预计也就700多M。

二、操作步骤

2.1 创建新索引生命周期策略

当前 ES 没有保存一年的索引生命周期策略,计划为该索引单独创建一个,索引保留时间设置为 365 天,此处选择默认创建,未设置冷热策略,这里通过 Kibana 开发工具进行创建,如下所示:

PUT _ilm/policy/365d_delete_policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "set_priority": { "priority": 100 } } }, "delete": { "min_age": "365d", "actions": { "delete": { "delete_searchable_snapshot": true } } } } } }

上述命令创建后,通过 Kibana 管理界面来查看,如下图所示。

image.png
image.png

附录:如果业务有特殊需求,比如需要为索引设置冷热分层策略,可以按以下步骤创建生命周期策略,如下所示:

PUT _ilm/policy/60d_full_lifecycle_policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "set_priority": { "priority": 100 } } }, "warm": { "min_age": "20d", "actions": { "set_priority": { "priority": 50 } } }, "cold": { "min_age": "40d", "actions": { "set_priority": { "priority": 0 } } }, "delete": { "min_age": "60d", "actions": { "delete": {} } } } } }

下面我来给大家解释下这个索引生命周期策略:

这段 Elasticsearch 的索引生命周期管理(ILM)策略名为 60d_full_lifecycle_policy,它定义了一个索引在其生命周期中的不同阶段(hot、warm、cold 和 delete),并为每个阶段设置了相应的操作,下面我将逐个解释各个阶段的具体含义:

1)hot 阶段(热阶段)

  • 最短时间: 0ms
    当索引刚创建时,它立即进入热阶段。这个阶段是索引刚生成的时期,数据写入和查询都非常频繁,因此系统会分配更多的资源给它。
  • 设置优先级: 索引的优先级被设置为 100,这是一个很高的数值,意味着系统会优先处理这些活跃的索引。

2)warm 阶段(温阶段)

  • 最短时间: 20天
    当索引已经存在了 20 天,系统会认为这个索引的数据不再像以前那么活跃,写入操作也大大减少了。这个时候,索引会进入温阶段。
  • 设置优先级: 索引的优先级降为 50,表示这个索引虽然仍然在用,但重要性降低了。系统会减少分配给它的资源。

3)cold 阶段(冷阶段)

  • 最短时间: 40天
    到了索引存在 40 天的时候,它的数据大部分情况下已经不再需要经常访问了。这个时候,索引进入冷阶段。
  • 设置优先级: 优先级进一步降低到 0,说明系统基本不会主动去处理这个索引,除非有查询需求。这个时候,系统会尽量少地消耗资源去存储和管理这些冷数据。

4)delete 阶段(删除阶段)

  • 最短时间: 60天
    当索引存在满 60 天后,系统会自动将这个索引删除。这个阶段的目的是为了释放存储空间,避免保存太久不再需要的数据。
  • 删除: 这个索引会被彻底删除,数据将不再保留。

这种策略特别适合日志数据管理,系统会自动根据索引的“年龄”调整处理方式,从而节省资源,同时保持一定的查询能力,最后到达删除阶段避免占用存储空间。

我们再通过 Kibana 管理界面来查看上面创建的具有不同策略的索引生命周期,如下图所示:

image.png

2.2 调整索引生命周期策略

上面创建了这个名为 365d_delete_policy 的生命周期策略,接下来,就是要将 同事反馈的索引的生命周期策略调整为新创建的生命周期策略,我们可以先通过命令查询该索引信息和对应索引生命周期策略,如下所示:

-- 在 Kibana 开发工具执行如下命令 GET index_name/_settings -- 上述命令执行后得到的信息如下 { "index_name" : { "settings" : { "index" : { "refresh_interval" : "30s", "translog" : { "sync_interval" : "60s" }, "provided_name" : "index_name", "creation_date" : "1728372902694", "analysis" : { "analyzer" : { "comma_analyzer" : { "filter" : [ "lowercase" ], "char_filter" : [ "replace_comma" ], "type" : "custom", "tokenizer" : "standard" }, "default" : { "filter" : "lowercase", "char_filter" : "replace_comma", "type" : "custom", "tokenizer" : "standard" }, "file_analyzer" : { "filter" : [ "lowercase" ], "char_filter" : [ "file_sep", "replace_comma" ], "type" : "custom", "tokenizer" : "standard" } }, "char_filter" : { "file_sep" : { "type" : "mapping", "mappings" : [ "/ => ' '", ". => ' '" ] }, "replace_comma" : { "type" : "mapping", "mappings" : [ ". => ' '", ", => ' '", "# => ' '", "$ => ' '", "% => ' '", "' => ' '", "( => ' '", ") => ' '", "* => ' '", "+ => ' '", "- => ' '", "/ => ' '", ": => ' '", "; => ' '", "< => ' '", "> => ' '", "= => ' '", "? => ' '", "@ => ' '", "[ => ' '", "] => ' '", "^ => ' '", "{ => ' '", "} => ' '", "~ => ' '", "` => ' '", "| => ' '", "& => ' '", "! => ' '", "\" => ' '", "_ => ' '" ] } } }, "priority" : "100", "number_of_replicas" : "1", "uuid" : "nuBIZuJgQIigExHjQMkO0w", "version" : { "created" : "7120199" }, "lifecycle" : { "name" : "21d_delete_policy" }, "routing" : { "allocation" : { "require" : { "type" : "hot" } } }, "number_of_shards" : "3", "merge" : { "scheduler" : { "max_thread_count" : "1" }, "policy" : { "max_merged_segment" : "1gb" } } } } } } -- 通过上述执行结果可以看到该索引使用名为 21d_delete_policy 的索引生命周期策略

现在就要通过命令来修改改索引的生命周期策略,此处仍然通过 Kibana 开发工具来执行,命令如下:

PUT index_name/_settings { "index": { "lifecycle": { "name": "365d_delete_policy" } } }

接下来,我们再通过命令来查看该索引的生命周期策略是否发生了改变,执行如下命令:

-- 在 Kibana 开发工具执行如下命令 GET index_name/_settings -- 上述命令执行后得到的信息如下 { "index_name" : { "settings" : { "index" : { "refresh_interval" : "30s", "translog" : { "sync_interval" : "60s" }, "provided_name" : "index_name", "creation_date" : "1728372902694", "analysis" : { "analyzer" : { "comma_analyzer" : { "filter" : [ "lowercase" ], "char_filter" : [ "replace_comma" ], "type" : "custom", "tokenizer" : "standard" }, "default" : { "filter" : "lowercase", "char_filter" : "replace_comma", "type" : "custom", "tokenizer" : "standard" }, "file_analyzer" : { "filter" : [ "lowercase" ], "char_filter" : [ "file_sep", "replace_comma" ], "type" : "custom", "tokenizer" : "standard" } }, "char_filter" : { "file_sep" : { "type" : "mapping", "mappings" : [ "/ => ' '", ". => ' '" ] }, "replace_comma" : { "type" : "mapping", "mappings" : [ ". => ' '", ", => ' '", "# => ' '", "$ => ' '", "% => ' '", "' => ' '", "( => ' '", ") => ' '", "* => ' '", "+ => ' '", "- => ' '", "/ => ' '", ": => ' '", "; => ' '", "< => ' '", "> => ' '", "= => ' '", "? => ' '", "@ => ' '", "[ => ' '", "] => ' '", "^ => ' '", "{ => ' '", "} => ' '", "~ => ' '", "` => ' '", "| => ' '", "& => ' '", "! => ' '", "\" => ' '", "_ => ' '" ] } } }, "priority" : "100", "number_of_replicas" : "1", "uuid" : "nuBIZuJgQIigExHjQMkO0w", "version" : { "created" : "7120199" }, "lifecycle" : { "name" : "365d_delete_policy" }, "routing" : { "allocation" : { "require" : { "type" : "hot" } } }, "number_of_shards" : "3", "merge" : { "scheduler" : { "max_thread_count" : "1" }, "policy" : { "max_merged_segment" : "1gb" } } } } } }

如果你想通过 Kibana 的开发工具(Dev Tools)来查询生命周期策略,可以使用以下命令:

json


复制代码
GET _ilm/policy/21d_delete_policy

在 Kibana 中打开 “Dev Tools”(开发工具),然后将上述命令粘贴到控制台并运行。这样,你就能看到名为 21d_delete_policy 的索引生命周期策略的详细信息。

PUT _ilm/policy/365d_delete_policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "set_priority": { "priority": 100 } } }, "delete": { "min_age": "365d", "actions": { "delete": { "delete_searchable_snapshot": true } } } } } }

通过上述执行结果可以看到该索引已经使用了新创建的 365d_delete_policy 新索引生命周期策略,此处爷可以通过 Kibana 管理界面查看,如下所示。

image.png

三、总结

这段配置展示了索引的刷新频率、事务日志同步、分词器和字符过滤器的自定义设置,表明该索引在处理不同文本和文件时有特定需求。索引的生命周期策略和优先级设置,也体现出该索引的重要性和删除时限。整体配置反映了一个资源优化、结构清晰且有良好管理策略的 Elasticsearch 索引。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论