问题场景
最近在做日志平台项目,项目中会收集很多机器节点的日志,归集后做分析处理。原先的设计是按日志类型及日期来划分索引,索引命名格式如 : test-job-log-v1-1-2023-07-01 , 但是有些类型的日志数据量比较多,可能单个索引主副本的数据会超过100g。考虑到大索引对于后续的维护存在故障恢复时间长的风险,且会造成写入期间机器负载不均衡,因此想用更合适的方式来规划索引,使负载更均衡, 应用索引生命周期ilm和滚动rollover方式,可以更好的限制索引大小,处理起来也比较方便,现将详细的使用过程做汇总说明。
索引生命周期设置
ES的索引生命周期分为hot \ warm \ cold \ delete 四个阶段 ,
HOT为必须的阶段外,其他为非必须阶段,可任意选择配置。因为日志索引只需要满足自动删除功能,所以我们一般只需规划日志索引的HOT、Warm和DELETE三个阶段;
HOT阶段
HOT阶段用来写入日志数据和查询日志数据
WARM阶段
WARM阶段用来存储相对的历史日志数据和查询日志数据,可使用手动迁移,或者自动迁移的方式,可缩减副本数 ,强制合并减少segments数量,设为只读索引
COLD阶段
COLD阶段和warm阶段的操作有些类似, 主要适用与查询进一步减少的索引
DELETE阶段
DELETE阶段是用来对日志数据的删除,日志数据满足DELETE阶段的删除条件(如:超过180天的索引数据),即可配置相关策略,手动或者脚本自动进行删除索引数据
rollover策略定义
ES的rollover策略和java应用中日志的rollover方式有一定相似性,java日志中对于日志文件到一定大小后,就进行日志文件的归档,打包压缩,然后将日志输出到新文件中,当前的日志文件名一般保持不变,归档的日志会限制保留的数量 ,比如只保留7个或保留7天的。
由前面kibana中索引HotPhase 的Rollover设置中可以看到可以定义
最大主分片大小 、最大时长、最大文档数量或索引最大大小等来配置rollover方式。
索引模板设置
索引模板设置,其实可以理解对一定格式的索命名称,进行模式上的预定义,可以预先设定一些字段的属性、索引的副本数量、定义一些脚本处理,当然也可以关联索引生命周期策略,便于对索引进行生命周期管理。
测试期间可以修改ilm的检查时间间隔, 默认是10分钟
Logstash 中使用
logstash 中的output 模块中可以配置elasticsearch 作为输出, es的配置中可以直接输出到指定的索引中,也可以用动态索引的方式
原先用按日期来划分缩影的方式如下:
后尝试ilm+rollover方式配置如下:
此时启动logstash 会有rollover alias调用
ES 中索引效果
以上就是本次在ELK中应用索引生命周期ilm和滚动rollover的过程和效果