有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

背景概述

当您有日志、监控等持续产生的时序数据存储需求时,通常通过滚动 Elasticsearch 索引的方式完成,该方式虽然能帮助您完成基本的数据管理功能,但是仍然需要结合索引模板、索引生命周期管理、索引别名等实现较完整的索引管理,有一定的使用门槛。另外也存在一定的索引维护成本,例如您需要在索引创建前进行分片数预估,避免索引分片数不足影响写入可用性、单副本索引在节点故障时需介入滚动新的索引,以及避免不合理的索引分片数预估,导致分片数过多,影响集群稳定性等。为了解决这些问题,腾讯云 Elasticsearch 自研了自治索引,自治索引是针对日志分析、运维监控等时序数据场景的一站式索引管理解决方案,您只需要通过简单的步骤创建自治索引,读写请求时指定单个自治索引对象即可,内置索引分片数自动调优、以及完整的索引生命周期管理。提升索引易用性的同时,降低索引的维护成本。本文主要介绍自治索引的适用场景、优势特性以及基本概念等。

适用场景

自治索引适用于日志分析、运维监控和其他时序数据场景,例如日志检索分析、Metric 监控分析、IoT 智能硬件数据收集以及监控分析等。

优势与特性

易使用:只需一条命令即可完成自治索引的创建,读写操作仅需关注单个自治索引,内置索引滚动、冷热数据搬迁、过期删除等功能,您只需在自治索引上配置即可,无需额外管理ILM策略和索引模板的成本。
易维护:内置索引分片数自动调整功能,实时跟踪业务写入压力变化,能够及时、稳定的调整索引分片数,以及故障自动滚动新的索引,大大降低索引维护成本。

前提条件

自治索引适用于2022年6月1日之后创建的7.14.2版本集群,早于此时间创建的7.14.2版本集群滚动重启后可支持,低于7.14.2版本的集群需升级至7.14.2版本。
写入到自治索引中的每个文档要求包含一个时间类型的字段,时间类型字段名称需与自治索引定义里的时间字段名称一致。如果创建自治索引时未指定时间字段名称,默认为@timestamp。

基本概念

自治索引与后备索引 自治索引通过Elasticsearch DataStream内核增强实现,内部关联一个或多个后备索引,后备索引即普通的Elasticsearch索引,后备索引处于隐藏状态,只需关注和操作自治索引即可。


写入模式 自治索引支持追加写入和按时间分区写入两种数据写入模式。追加写入模式,数据将写到最新的后备索引,适用于日志场景;按时间分区写入模式,数据将根据时间字段写入到对应的后备索引,适用于指标场景。
写入请求 向自治索引提交写请求时,会根据写入模式路由到对应的后备索引上。其中,追加写模式会路由到最新的后备索引,时间分区写模式会路由到数据时间对应的后备索引。
1.1 追加模式写入


1.2 时间分区模式写入


查询请求 向自治索引提交查询请求时,请求会转发到所有后备索引上。


滚动更新 滚动更新将为自治索引新建一个新的后备索引,当前支持以下两种滚动方式:
1.1 自动滚动更新:通过自治索引内置功能实现,当满足自治索引配置的滚动周期条件或者当前提供写入的后备索引所在节点故障时,自动滚动新的后备索引。
1.2 手动滚动更新:通过 Rollover API 实现,操作方式详见 Rollover
索引生命周期管理 通过 Elasticsearch ILM 索引生命管理实现,可直接在自治索引配置生命周期管理策略,无需额外管理生命周期管理策略和关联索引模板,策略类型支持 Elasticsearch 完整的索引生命周期管理策略。
说明:
自治索引有类似回收站的机制,如果通过配置 expire.max_age 和 expire.max_size 字段的方式控制后备索引的删除,被删除的后备索引会首先被解除挂载并设置为隐藏,等到后备索引中的数据过期一天后才真正删除。目前可以通过提交工单来调整回收站的保留时间。
索引分片数管理 通过自治索引内置功能实现,内部实时跟踪索引写入压力变化,及时、稳定,调整索引分片数。您无需关心索引分片数不足引起的写入可用性,以及集群分片数过多的问题。

使用方式

腾讯云 ES 支持用户通过简单易用的可视化界面使用与管理自治索引,详情请参考 新建自治索引

常见 API

1. 自治索引创建:
PUT /_data_stream/indexname
{
"mappings": {
"properties": {
}
},
"settings": {
},
"policy": {
"warm.actions.migrate":{},
"warm.min_age":"3d"
},
"options": {
"timestamp_field": "@timestamp",
"expire.max_age": "100d",
"expire.max_size": "1TB",
"pre_create.enable": true,
"rollover.max_age": "1h",
"rollover.dynamic": true,
"shard_num.dynamic": true,
"write_mode": "time_partition"
}
}
mappings 与 ES index 中的 mapping 一致,用于设置 ES index mapping,可选填。
settings 与 ES index 中的 settings 一致,用于设置 ES index settings,可选填。
policy 与 ES ilm 设置含义一致,配置方式做了简化,用于设置索引生命周期策略,可选填。
options 自治索引属性,其中:
timestamp_field:时间字段,支持用户自定义,可选填,不填默认为:@timestamp。
expire.max_age:时间范围分区过期最长保留时间,单位支持h(小时)、d(天),最小单位为1小时,不填默认为0,即不删除历史范围分区。
expire.max_size:时间范围分区过期最大存储容量,超过则淘汰历史时间范围分区,单位支持b、kb、mb、gb、tb、pb,不填默认为0,即不淘汰历史范围分区。
precreate.enable:是否开启预创建时间范围分区,默认值为 true,表示自动预创建时间范围分区。
rollover.max_age:时间范围滚动周期,单位支持h(小时)、d(天),可选填,默认值1d,最小单位为1h。-1表示不滚动时间范围分区。
rollover.dynamic:时间范围分区滚动周期动态调整开关,默认为 true,表示是否支持平台动态调整时间范围分区的滚动周期。
shard_num.dynamic:时间范围分区分片数动态调整开关,默认为 true,表示是否支持平台动态调整时间范围分区的分片数。
write_mode:时间范围分区写入模式,可选值为:"append_only":追加模式写入,表示数据会写入最新的时间范围分区、"time_partition":时间分区模式写入,表示数据会写入数据时间对应的时间范围分区。默认为 append_only 模式。
2. 自治索引删除:
DELETE /_data_stream/index_name
3. 自治索引修改:
POST _data_stream/indexname/_update
{
"options": {
"expire.max_age": "30d"
}
}

----
除options.timestamp_field和options.write_mode之外,其他属性均支持修改
修改配置成功后,生命周期的相关配置将在所有后备索引中生效,其他配置例如分片数、副本数、字段映射等仅在后续滚动出的后备索引中生效,已有的后备索引不会更新。
4. 自治索引查询,与普通索引查询用法一致:
GET indexname/_search
5. 写入,与普通索引写入用法一致,均支持 bulk 和 doc 方式写入:
PUT /indexname/_bulk
{"create":{ }}
{"@timestamp": "2022-03-13T03:07:34.348+08:00","field1": "a"}
{"create":{ }}
{"@timestamp": "2022-03-24T10:51:34.348+08:00","field1": "a"}
6. 自治索引滚动:
POST indexname/_rollover
7. 查询自治索引定义:
1.指定名称查询
GET _data_stream/indexname?include_define
2.查询所有自治索引
GET _data_stream?include_define
----
其中,include_define选项表示结果包含自治索引属性内容,不指定则和社区DataStream返回内容一致