2. Elastic成本模型与计费机制

要治理 Elastic 成本,第一步不是“省钱”,而是把账单拆到能解释清楚的程度。Elastic 的成本并不是一个单一价格,而是由多个组件、多个资源维度叠加出来的。Elasticsearch、Kibana、Logstash、Beats 在计费上扮演的角色完全不同:Elasticsearch 是存储与计算的主要消耗者,Kibana 主要消耗计算与少量存储,Logstash 消耗计算与网络,Beats 则主要消耗终端资源与网络带宽。理解这一点,才能判断一笔费用到底该归到哪个组件、哪个团队、哪个业务。

一、各组件的计费维度

在 Elastic Cloud 上,计费通常按部署(Deployment)为单位,再拆到各个资源层。Elasticsearch 的计费维度包括:热/温/冷/冻结层的数据节点规格与数量、主分片与副本分片带来的存储量、快照仓库(Snapshot Repository)的存储费用、以及跨集群搜索或跨集群复制的网络流量。Kibana 通常按实例规格计费,若开启多个 Kibana 实例做高可用,费用会成倍增加。Logstash 在 Elastic Cloud 上一般以计算实例(如 VCU 或按小时计费的实例)计价,输入输出吞吐越高,所需实例越多。Beats 本身是免费开源的,但它在终端上采集数据后发送到 Elasticsearch 或 Logstash,产生的网络出口流量和接收端的写入压力,会间接体现在 Elasticsearch 的计算与存储账单上。

自建集群的成本构成则更“物理”。计算费用来自虚拟机或裸金属服务器,存储费用来自云盘(如 ESSD、gp3)或本地 NVMe,网络费用包括跨可用区复制流量、公网出口流量和跨区域传输,许可费用则取决于是否使用 Elastic 商业版功能(如机器学习、高级安全、跨集群复制等)。自建集群看似“便宜”,但往往忽略了运维人力、快照存储、监控组件和冗余资源带来的隐性成本。

Elastic 组件计费维度与成本流向 存储 / 计算 / 网络 / 许可 四类费用在组件间的分布 Elasticsearch • 数据节点规格 × 数量 • 主分片 + 副本分片存储 • 热/温/冷/冻结层资源 • 快照仓库存储 • 跨集群搜索/复制流量 存储 + 计算 主导 Kibana • 实例规格 × 数量 • 高可用多实例费用 • 少量报告/截图存储 • 与 ES 通信流量 计算 主导 Logstash • 计算实例(VCU/小时) • 输入输出吞吐量 • 管道 Worker 数量 • 网络出口流量 计算 + 网络 主导 Beats • 软件本身免费 • 终端 CPU/内存占用 • 采集后网络传输 • 间接推高 ES 写入 网络 + 间接成本 四类费用拆解 存储费用 分片数据 + 副本 + 快照 计算费用 节点规格 × 数量 × 时长 网络费用 跨区复制 + 公网出口 许可费用 商业版功能订阅 成本归因路径 数据采集 → 传输/缓冲 → 索引写入 → 存储保留 → 查询分析 → 可视化 每一段链路都会在存储、计算或网络账单上留下痕迹

二、云上 Elastic Cloud 与自建集群的成本构成差异

Elastic Cloud 的账单结构相对清晰:计算资源按实例规格和运行时长计费,存储按实际使用量计费,网络按流量计费,商业功能按订阅层级计费。它的优势是弹性扩缩容快、运维负担低,但单价通常高于自建。自建集群的账单则分散在云厂商的多个产品中:ECS 或裸金属对应计算,云盘或本地盘对应存储,VPC 流量和公网带宽对应网络,Elastic 商业许可对应许可费用。自建集群的“隐性成本”往往被低估,例如为了高可用而多部署的副本节点、跨可用区复制产生的流量、快照存储的长期累积,以及运维团队投入的人力。

一个常见的误区是只比较“每 GB 存储单价”。实际上,Elasticsearch 的存储成本必须结合副本数、分片开销和索引生命周期来算。假设一个索引每天写入 100 GB 原始数据,保留 30 天,副本数为 1,那么实际占用存储约为 100 GB × 30 天 × 2(主+副本)= 6 TB。如果使用 Elastic Cloud 的温层存储,单价约为每 GB 每月 0.1 美元(示例假设),仅存储一项每月就约 600 美元。若再算上热层节点、Kibana 实例和 Logstash 管道,总成本会显著上升。因此,拆解账单时必须把“原始数据量”和“实际占用存储量”区分开。

三、存储、计算、网络、许可费用的拆解方法

拆解账单可以按以下顺序进行。第一步,从云厂商账单或 Elastic Cloud 账单中导出按资源维度的明细,区分计算、存储、网络、许可四类。第二步,将每类费用映射到具体组件:Elasticsearch 的数据节点费用归入计算,云盘和快照归入存储,跨集群流量归入网络;Kibana 实例归入计算;Logstash 实例归入计算,其出口流量归入网络;Beats 本身不产生直接费用,但其采集量会推高 Elasticsearch 的写入和存储。第三步,按业务线或索引前缀做二次分摊。例如,日志索引按 `logs-app-*`、`logs-nginx-*` 等前缀统计存储量和写入量,再按比例分摊 Elasticsearch 的存储与计算费用。第四步,识别可优化项:副本数是否过高、冷热层是否合理、快照保留策略是否过长、Logstash 管道是否存在重复解析、Kibana 实例是否过多。

拆解示例:某自建集群月度账单中,计算费用 4200 元,存储费用 2800 元,网络费用 600 元,许可费用 1500 元。按索引前缀统计,`logs-app-*` 占用存储 1.2 TB,`logs-nginx-*` 占用 0.8 TB,`metrics-*` 占用 0.5 TB。则存储费用可按 1.2:0.8:0.5 的比例分摊到三个业务线。若发现 `logs-nginx-*` 的副本数为 2,而实际查询频率很低,可将其副本数降为 1,预计节省约 0.4 TB 存储,对应每月约 200 元(示例估算)。

四、从计费机制到成本治理的衔接

理解计费机制之后,成本治理才有抓手。存储侧,可以通过索引生命周期管理(ILM)把冷数据从热层迁移到温层或冷层,降低单位存储成本;计算侧,可以通过调整分片数量、合并小分片、减少不必要的副本,降低节点压力;网络侧,可以尽量让 Logstash 和 Elasticsearch 在同一可用区,减少跨区流量;许可侧,可以评估是否真正需要商业版功能,避免为未使用的特性付费。Beats 侧,则可以通过调整采集频率、过滤无用字段、使用压缩传输,减少写入量和网络流量。

需要强调的是,成本拆解不是一次性的工作。随着业务增长和索引结构变化,账单结构也会变化。建议每月做一次“账单—组件—业务”的三层对账,把异常增长点定位到具体索引或具体管道。只有把计费维度与运维动作对应起来,才能把成本治理从“看账单”变成“改配置”。