2. Elastic数据资产盘点
在Elasticsearch集群中,数据资产并不只是“索引”这一种形态。一个业务日志从写入到归档,往往会经历索引、别名、数据流、ILM策略、快照仓库等多个对象的协同。如果只盘点索引,就会遗漏别名背后的读写入口、数据流的滚动规则、ILM的生命周期阶段以及快照仓库的恢复能力。因此,资产盘点的目标是建立一张“对象—关系—状态”的清单,让每个数据资产都能被定位、被解释、被追溯。
一、五类核心资产的识别口径
盘点前先统一识别口径,避免把不同层级对象混在一起统计。
- 索引(Index):实际存储文档的分片集合,是数据资产的物理载体。识别时关注索引名、健康状态、主分片数、副本数、文档数、存储大小、创建时间、是否被ILM托管。
- 别名(Alias):指向一个或多个索引的逻辑名称,常用于读写分离、版本切换和灰度发布。识别时关注别名指向的索引列表、是否配置
is_write_index、是否被数据流引用。 - 数据流(Data Stream):面向时序数据的写入抽象,由一个或多个隐藏索引组成,写入时自动路由到当前写索引。识别时关注数据流名称、后备索引列表、当前写索引、生成周期、模板与ILM绑定关系。
- ILM策略(Index Lifecycle Management):定义索引在 hot、warm、cold、frozen、delete 各阶段的行为。识别时关注策略名、阶段顺序、滚动条件、副本调整、强制合并、可搜索快照、删除条件。
- 快照仓库(Snapshot Repository):保存快照的存储位置,是数据可恢复性的最后保障。识别时关注仓库名、类型(如 fs、s3)、路径或桶、是否可写、最近快照时间、快照覆盖的索引或数据流。
二、从API到清单:识别方法
Elasticsearch提供了多组API用于资产识别。实际盘点时,建议按“先全局、再局部、后关联”的顺序采集。
# 1. 索引与别名总览
GET _cat/indices?v&s=index
GET _cat/aliases?v
# 2. 数据流及其后备索引
GET _data_stream
GET _data_stream/<data-stream-name>
# 3. ILM策略与托管状态
GET _ilm/policy
GET <index-name>/_ilm/explain
# 4. 快照仓库与快照
GET _snapshot
GET _snapshot/<repository>/_all
# 5. 索引模板(数据流通常由模板创建)
GET _index_template
GET _component_template
采集后不要直接堆成一张大表,而应建立三层清单:资产层记录对象本身,关系层记录对象之间的指向与绑定,状态层记录健康度、生命周期阶段和最近快照时间。这样在排障或迁移时,才能快速回答“这个索引属于哪个数据流、由哪个ILM策略管理、最近一次快照是什么时候”。
三、资产关系图
下图展示五类资产之间的典型关系:写入请求先经过数据流或别名,数据流由索引模板创建并绑定ILM策略,ILM策略驱动后备索引滚动与删除,快照仓库则对索引或数据流进行周期性备份。
四、清单化:从对象到可执行台账
盘点结果最终要落到一份可维护的清单。建议至少包含以下字段,并按“数据流/索引”为主键组织。以下为示例结构,字段值属于教学示例,实际应以集群查询结果为准。
| 资产名称 | 类型 | 关联对象 | ILM策略 | 当前阶段 | 存储大小 | 最近快照 | 负责人 |
|---|---|---|---|---|---|---|---|
| logs-app-prod | 数据流 | 别名 app-logs-read | app-logs-ilm | hot | 约 42 GB | 2025-01-15 02:00 | 平台组 |
| .ds-logs-app-prod-000003 | 后备索引 | 数据流 logs-app-prod | app-logs-ilm | hot | 约 18 GB | 2025-01-15 02:00 | 平台组 |
| app-logs-read | 别名 | 指向 3 个后备索引 | — | — | — | — | 平台组 |
| app-logs-ilm | ILM策略 | 绑定 logs-app-prod | — | — | — | — | 平台组 |
| repo-s3-prod | 快照仓库 | 覆盖 logs-* 与 metrics-* | — | — | — | 2025-01-15 02:00 | 平台组 |
五、盘点中的常见盲区与校验
第一,只统计可见索引,忽略隐藏索引。数据流的后备索引以 .ds- 开头,默认在部分视图中被隐藏,盘点时必须显式包含。第二,别名与数据流混用。一个别名可能同时指向普通索引和数据流后备索引,需通过 _cat/aliases 与 _data_stream 交叉核对。第三,ILM策略存在但未生效。索引可能被创建时未绑定策略,或策略被修改后未重新应用,应通过 _ilm/explain 检查 managed 与 step 字段。第四,快照仓库可写但快照失败。仓库注册成功不代表快照成功,应检查最近快照的 state 与 failures。
六、可复用的盘点命令组合
将上述命令组合成一次采集脚本,输出为结构化文件,便于后续比对和版本管理。
# 采集索引、别名、数据流、ILM、快照仓库
GET _cat/indices?v&h=index,health,pri,rep,docs.count,store.size,creation.date
GET _cat/aliases?v&h=alias,index,is_write_index
GET _data_stream?expand_wildcards=all
GET _ilm/policy
GET _snapshot/_all
# 对单个索引检查ILM执行状态
GET logs-app-prod/_ilm/explain
# 对单个数据流检查后备索引
GET _data_stream/logs-app-prod?expand_wildcards=all
资产盘点不是一次性任务,而应形成周期性快照。建议每周或每次重大变更后重新采集,并与上一版清单做差异比对,重点关注新增索引、别名指向变化、ILM阶段推进和快照失败。只有把“识别—清单—校验—更新”连成闭环,数据资产才真正可管理、可审计、可恢复。