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策略驱动后备索引滚动与删除,快照仓库则对索引或数据流进行周期性备份。

Elastic 数据资产关系与盘点对象 写入请求 应用 / Beats / Logstash 数据流 Data Stream logs-app-prod 当前写索引 .ds-...-000003 别名 Alias app-logs-read / app-logs-write is_write_index 标记 后备索引 Index .ds-logs-app-prod-000001 分片 / 文档数 / 存储大小 ILM 策略 hot → warm → cold → delete rollover / shrink / forcemerge 快照仓库 Snapshot Repository fs / s3 / gcs · 仓库名 · 路径或桶 · 最近快照时间 覆盖索引或数据流 · 可恢复性验证 写入 逻辑入口 物理存储 生命周期 滚动/删除 备份 备份

四、清单化:从对象到可执行台账

盘点结果最终要落到一份可维护的清单。建议至少包含以下字段,并按“数据流/索引”为主键组织。以下为示例结构,字段值属于教学示例,实际应以集群查询结果为准。

资产名称 类型 关联对象 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策略管理、最近一次快照是否成功。若三者都能回答,说明清单具备可追溯性。

六、可复用的盘点命令组合

将上述命令组合成一次采集脚本,输出为结构化文件,便于后续比对和版本管理。

# 采集索引、别名、数据流、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阶段推进和快照失败。只有把“识别—清单—校验—更新”连成闭环,数据资产才真正可管理、可审计、可恢复。