成本与取舍 · 算清这笔账

可观测性的账单常常失控,因为没人算过它。这一章给一套可执行的成本模型(指标/日志/追踪各自怎么算)、四个降本杠杆的性价比排序,以及那个必须有人回答的问题——这份数据值它的价钱吗?

作者 David更新于 第 51 篇(共 52 篇)

成本与取舍 · 算清这笔账

基数控制住了,但账单还是会涨。这一章讲怎么算这笔账、怎么降。

先说个不舒服的事实:很多团队的可观测性账单比业务服务器还贵,而且没人能说清钱花在哪。

先算清楚:三支柱各自的成本模型

第 0 部分讲过三者的成本曲线。现在给可计算的公式:

① 指标

存储 ≈ series 数 × (86400 / 抓取间隔) × 天数 × 每点字节数
内存 ≈ 活跃 series 数 × 1~3 KB

例:100 万 series,15s 间隔,保留 15 天
  存储 = 1e6 × 5760 × 15 × 2B ≈ 173 GB
  内存 = 1e6 × 2KB ≈ 2 GB(仅 series 索引,不含查询)

关键变量是 series 数——它是乘法的结果,也是唯一值得攻的。每点约 1.3~2 字节是 Gorilla 压缩的功劳。

② 日志

存储 ≈ QPS × 每请求日志条数 × 每条字节数 × 86400 × 天数 × 压缩率

例:1 万 QPS,每请求 3 条日志,每条 500B,存 7 天,压缩 10 倍
  = 1e4 × 3 × 500 × 86400 × 7 / 10 ≈ 907 GB

注意它和流量成正比——这就是“线性增长”的具体含义。“每请求 3 条日志”这个系数是你最容易砍的地方。

③ 追踪

存储 ≈ QPS × 采样率 × 每 trace 的 span 数 × 每 span 字节数 × 86400 × 天数

例:1 万 QPS,1% 采样,每 trace 20 个 span,每 span 500B,存 7 天
  = 1e4 × 0.01 × 20 × 500 × 86400 × 7 ≈ 604 GB

采样率是唯一的大杠杆——但它决定了你能看到什么。

别忘了那些隐性成本**——它们常常比存储还贵:**

四个降本杠杆(按性价比排序)

① 降基数(性价比最高,应该先做)

上一章讲透了。为什么排第一?因为它同时降存储、降内存、降查询成本,而且几乎不损失信息——那些高基数标签本来也没人按它查。

典型收益:删掉几个没用的标签,series 数降一个数量级。这是白捡的。

② 删没人看的数据(第二便宜)

# 哪些指标从来没被任何查询/告警/看板用过?
# 思路:导出所有指标名,和"看板 JSON + 告警规则"里出现的名字做差集

大多数团队有 30~50% 的指标从没被查过。 常见来源:某个 exporter 默认吐出几百个指标,你只用其中 5 个。

metric_relabel_configs 的 keep 白名单(而非 drop 黑名单)是更彻底的做法:

metric_relabel_configs:
  - source_labels: [__name__]
    regex: "(http_requests_total|http_request_duration_seconds_.*|up)"
    action: keep      # ← 只留这些,其余全丢

⚠️ 白名单的风险:出事时才发现“那个指标我们没采”。只对你非常熟悉的 exporter 用它。

③ 缩短保留期(简单但有损)

问一句:你上次查 30 天前的数据是什么时候?

多数排障只看最近几小时。而长期数据的用途是趋势和容量规划——那不需要原始精度。

原始数据保留 15 天(排障用)
  + [recording rule](/manual/observability/recording-rules) 预聚合的低精度数据保留 1 年(趋势用)

这是分层保留,比“一刀切保留 90 天”省得多、也更实用。

④ 采样(最后才动,因为最有损)

追踪必须采样。但指标不该采样——它本来就是聚合的,已经很便宜了;对指标“采样”(比如拉长抓取间隔到 5 分钟)会破坏 rate()、让 lookback 失效,得不偿失。

那个必须有人回答的问题

“这份数据值它的价钱吗?”——大多数组织从没问过。

一个能让讨论落地的做法:给可观测性也定个“预算”,并把成本归因到团队:

# 每个 team 的 series 数(前提:指标上有 team 标签)
count by (team) ({__name__=~".+"})

当一个团队看到“我们的监控每月花 8000 块”时,他们会自己去删没用的指标。 而当成本是“公司的、没人的”,它就只会涨。

这和错误预算的思路一模一样:把一个模糊的争论,变成一个有数字的决策。

但也要防止走向另一个极端: 为了省钱把监控砍到瞎——然后一次事故的损失,超过你省下的全年账单。

判断的锚点:

一句话:砍“覆盖面”,别砍“骨架”。

小结与下一章

可观测性账单常常失控,因为没人算过它。 三支柱的成本可计算:指标 = series 数 × 采样频率 × 天数 × ~2 字节(关键变量是 series 数,唯一值得攻的);日志 = QPS × 每请求条数 × 大小(与流量成正比,“每请求几条”是最容易砍的系数);追踪 = QPS × 采样率 × span 数。别忘隐性成本:查询算力、跨区流量(尾采样在这里很贵)、Collector 自身 × 节点数,以及人的时间(最贵、最少被算)。四个杠杆按性价比:①**降基数(同时降存储/内存/查询,且几乎不损失信息——白捡);②删没人看的数据**(多数团队 30~50% 的指标从没被查过;keep 白名单更彻底但有“出事才发现没采”的风险);③**分层保留(原始 15 天排障 + 预聚合 1 年看趋势,胜过一刀切);④采样**(最有损,最后动;指标不该采样——拉长间隔会破坏 rate() 和 lookback)。必须有人回答“这份数据值它的价钱吗”——把成本归因到团队,让模糊的争论变成有数字的决策(和错误预算一个思路);但别走极端:砍覆盖面,别砍骨架(SLO 指标和 RED/USE 不能省)。

钱算清了。最后一章回到人:怎么把这套东西落地,以及这个专栏的收尾。 👉 落地与收尾。

参考资料

本页目录