Skip to content
指标与告警体系设计 · 第 3 篇 / 共 4 篇
领域运维与部署
专题可观测性专题
当前序列指标与告警体系设计
阅读位置第 3 篇 / 共 4 篇当前专题第 1 个序列 / 共 3 个序列

标签基数为什么会拖垮 Prometheus

Prometheus 最怕的不是单条指标多,而是标签组合过多。因为每一组标签值都会形成一条独立时间序列,标签一失控,内存、磁盘、查询和告警链路都会一起变重。

先说结论

  • 高基数问题的本质是时间序列数量爆炸
  • 用户 ID、订单号、URL 全路径、Trace ID 这类字段,通常不适合直接做标签
  • 指标设计要先考虑聚合维度,再考虑排障便利,不能反过来

为什么会拖垮 Prometheus

每组标签都是一条新序列

一个指标如果有 methodstatusinstance 三个低基数标签,通常还能接受;但如果再加上 user_id 或完整 URL,序列数会迅速膨胀。

写入和查询成本都会上升

序列越多,抓取、压缩、索引、查询都更重。线上表现往往是 Prometheus 内存上涨、抓取变慢、查询超时、Grafana 面板卡顿。

告警也会被放大

如果告警规则基于高基数标签展开,同一类问题可能瞬间炸出成百上千条告警,值班同学根本处理不过来。

实战里怎么治理

先禁掉明显危险的标签

动态 ID、随机值、完整异常信息、完整 SQL、完整路径参数,这类内容优先排查。它们最容易造成基数失控。

再做标签规范

团队最好明确哪些标签可以上报,哪些只能写日志不能写指标。比如实例、机房、接口模板通常可以保留,用户和订单维度应更多依赖日志或 Trace。

最后建立预算和巡检

高基数问题不能靠出事后再查。应该定期巡检 top N 指标、序列数增长最快的 job、最重的查询语句,把治理做成常规动作。

常见误区

为了排障方便,把能想到的信息都打成标签

指标的职责是聚合观察,不是替代日志。

只关注单个指标值,不关注序列数量

很多系统看起来 QPS 不高,但 Prometheus 已经被数百万序列压得很吃力。

出现高基数后只想着扩容

扩容只能缓一阵,标签设计不收敛,问题还会回来。

一句话总结

Prometheus 拖垮的根因通常不是“采集太多”,而是“标签太散”。指标负责聚合,日志和 Trace 负责细节,这条边界一定要守住。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Grafana 看板设计怎么做更有判断力适合把 Prometheus、Grafana、标签治理和告警分级放在一起看。可观测性专题 · 指标与告警体系设计同一序列 · 回看前文会更完整Prometheus 的 Pull 模型和 Exporter 怎么理解适合把 Prometheus、Grafana、标签治理和告警分级放在一起看。可观测性专题 · 指标与告警体系设计同专题其他序列 · 共享标签:部署交付高基数 label 为什么会把 Prometheus 拖慢适合把指标设计、告警链路、SLO 和日志链路打通放在同一条可观测性主线上看。可观测性专题 · 可观测性设计与告警治理同专题其他序列 · 共享标签:部署交付告警分级和升级链路怎么设计适合把指标设计、告警链路、SLO 和日志链路打通放在同一条可观测性主线上看。可观测性专题 · 可观测性设计与告警治理跨专题关联 · 同场景:部署交付多环境发布怎么设计:开发、测试、预发、生产不只是名字不同适合沿着流水线设计、自动部署、发布策略、数据库变更和多环境治理这条线往下读。CI/CD 与发布治理专题 · CI/CD 与发布治理跨专题关联 · 同场景:部署交付多阶段构建之外还有哪些瘦身手段适合把镜像分层、镜像瘦身、时区日志、静态缓存和 WebSocket 代理放进一条容器交付主线上看。容器与站点部署专题 · 容器镜像与站点交付细节
继续阅读指标与告警体系设计当前序列第 3 篇 / 共 4 篇当前专题第 1 个序列 / 共 3 个序列
往前看
上一篇Prometheus 的 Pull 模型和 Exporter 怎么理解回到当前序列上一章上一序列Kubernetes 发布与排障主线从第 1 篇开始:Ingress、Service 和集群网络链路怎么串起来看
往后看
下一篇Grafana 看板设计怎么做更有判断力继续当前序列下一章下一序列链路追踪与 SLO 治理从第 1 篇开始:Alertmanager 路由、静默和升级怎么设计

把零散经验整理成可查、可复用、可持续更新的企业级知识门户