1. 日志存储成本概述

先问一个问题:你的公司一年为日志存储花了多少钱?

我见过太多团队,日志量每月翻一番,成本却跟着翻倍。有一天财务拿着账单过来问:“这个月日志存储又涨了20%,你们到底存了什么?”

说实话,日志这东西,不痛不痒。平时没人管,出了问题又急得要命。可成本就这么悄悄溜走了。我在某电商公司做过一次排查,发现光是ELK集群的存储开销,一年就占了基础设施预算的15%。

所以控制日志存储成本,不是可选项,而是必修课。

为什么日志存储成本会失控?

说白了,三个原因:

  • 数据量暴增:微服务、容器化、IoT,随便一个系统每天就能吐出几十GB日志。
  • 保存周期过长:默认保留30天?很多团队直接设成90天甚至180天。
  • 盲目全量索引:每一条日志都建全文索引,存储和计算都烧钱。

我记得有一次帮一家金融客户做审计,他们要求所有交易日志保存7年。结果你猜怎么着?单是2019年的日志就占了120TB,里面80%的数据从来没被查询过。嗯,这不是存储,是埋单。

小提示: 不要一上来就想“压缩”或者“删日志”。先搞明白你的日志到底有多少是被真正用到的。我曾见过一个团队,砍掉不查询的日志后,存储成本直接降了60%。

常见的日志存储方案

市面上方案不少,但归根结底就是三大类。我整理了一张对比表,你看看心里就有数了。

方案 典型产品 成本特点 扩展性 查询性能
本地磁盘 服务器本地SATA/SSD 一次性硬件投入,容量固定 差,加盘要停机 高
网络附加存储(NFS) NFS Server, GlusterFS 中等,按TB付费 中等 中等
对象存储 S3, MinIO, Ceph 极低,按实际用量计费 优秀,无限扩展 较低(需配合缓存)
云日志服务 ELK PaaS, SLs, Logz.io 高,按写入量+存储量+查询收费 优秀,托管 高
时序数据库 InfluxDB, TimescaleDB 中等,适合结构化日志 好 高(针对时间范围)

你会问:哪个方案最好?说实话,没有银弹。我在不同的项目里都试过,最后发现大多数场景都是混合方案——热数据用高性能存储,冷数据丢对象存储。这个思路我们后面会细讲。

日志存储成本的构成

成本不是一笔糊涂账。拆开来看,主要有这些部分:

  • 存储介质成本:硬盘、SSD、云存储的每GB单价。
  • 传输带宽成本:日志从业务服务器传到存储系统的网络流量。跨机房或跨云时尤其贵。
  • 索引计算成本:搭建全文索引需要消耗CPU和内存,这部分经常被忽略。
  • 冗余备份成本:副本、快照、异地容灾。为了高可用,至少多花50%-200%的存储。
  • 管理运维成本:人工维护集群、故障恢复、升级迁移的时间成本。

我曾经帮一个SaaS公司做成本核算,发现他们每月花在日志上的钱里,33%是存储,27%是索引计算,20%是跨区域同步的网络费,剩下20%是人工和备份。你想想看,如果能把索引策略优化一下,成本是不是直接降四分之一?

关键发现: 日志存储中,热数据一般只占10%~20%,但产生的成本却超过50%。因为热数据通常放在高性能SSD上,还要保持在线索引。所以成本控制的突破口,就在冷热分层。

成本构成一览(SVG图)

下面这张图把日志存储成本的各个部分梳理清楚了。你可以把它当成一个检查清单,对照自己的系统算一笔账。

日志存储成本构成 总成本 存储介质成本 索引计算成本 传输带宽成本 冗余备份成本 管理运维成本 典型比例(运营阶段) • 存储介质:30%~45% • 索引计算:20%~35% • 传输带宽:10%~25% • 冗余备份:8%~15% • 管理运维:5%~10% 控制思路 1. 冷热分层,热(SATA) + 冷(对象) 2. 关闭无用索引字段 3. 设置合理保存周期 4. 使用压缩(gzip/snappy) 5. 减少副本数(非关键日志)
注意: 很多团队只盯着存储介质成本,忽略了索引计算和网络带宽。我见过一个案例:为了省存储费,把日志从SSD迁移到机械盘,结果查询慢得无法忍受,最后又花了三倍的钱改回去。所以不要只看单价,要算总账。

一个真实的成本失控案例

前年我接手一个游戏公司的日志项目。他们的ELK集群每天接收200GB日志,索引策略是全字段全文索引,副本数设成3。我问运维为什么要3副本?他说“默认配置就这样”。

你猜结果怎样?

每月存储成本70万元,其中80%的日志从没被查询过。我们只做了三件事:

  1. 把副本数从3降到2(非关键日志降到1)
  2. 对历史超过7天的日志禁用全文索引
  3. 超过30天的日志自动迁移到对象存储(只保留压缩文件)

三个月后,月成本降到了28万元。60%的节省。说白了,很多成本都是“默认配置”和“懒得改”造成的。

核心误区:日志不是越多越好

新手运维容易犯一个错:把日志当成安全绳,存得越多越保险。其实不然。日志存储的成本,本质上是在为“未来的可能性”买单——你存着它,是为了以后可能查得到。

但现实是,99%的日志在保存期内永远不会被查询。那为什么还要全量存?

我个人习惯的做法是:先问业务方三个问题——

  • 哪些日志必须在线查询?
  • 查询的频次是多少?(每天?每周?)
  • 最长能接受多久的恢复时间?(比如冷数据从对象存储拉回来要多久)

把答案理清楚,存储策略就能定下来。我曾经因为没问清楚,给一个团队设计了180天全量在线存储的方案,结果对方实际只需要7天在线查询,后面只需要归档保留。多花了四个月的成本,都是教训啊。

个人建议: 刚开始做成本优化时,不要一口气上大改造。先花一周时间把现有日志的访问模式抓出来(查询频次、时间段、字段分布),然后从最贵的部分下手。我在项目中遇到过好几次,改完索引和副本配置,成本直接腰斩。

好了,这一章我们聊了为什么日志存储成本会失控,常见方案有哪些,成本到底花在哪儿。接下来要做的,就是拿起计算器,算一算你自己的系统。别急,后面几章我会手把手教你怎么算、怎么砍、怎么落地。