Prometheus 抓取间隔与时间序列基数爆炸的防范实践

举报
yd_240066378 发表于 2026/11/09 08:43:42 2026/11/09
【摘要】 背景在小团队把业务指标接到 Prometheus 后,最常见的两类问题不是“怎么配 scrape”,而是抓取间隔过密,以及高基数标签把时间序列数量打爆。磁盘占用、compaction 压力和查询延迟都会跟着一起恶化,最后才表现为看板卡顿。 抓取间隔怎么选默认 15 秒对很多业务过密。建议先按指标变化速度分层:基础设施与进程存活:30 秒到 60 秒通常足够。业务请求量、错误率、延迟分位:1...

背景

在小团队把业务指标接到 Prometheus 后,最常见的两类问题不是“怎么配 scrape”,而是抓取间隔过密,以及高基数标签把时间序列数量打爆。磁盘占用、compaction 压力和查询延迟都会跟着一起恶化,最后才表现为看板卡顿。

抓取间隔怎么选

默认 15 秒对很多业务过密。建议先按指标变化速度分层:

  1. 基础设施与进程存活:30 秒到 60 秒通常足够。
  2. 业务请求量、错误率、延迟分位:15 秒到 30 秒。
  3. 日级或小时级批处理结果:用 Pushgateway,或单独配置更长间隔。

经验上,把全局默认改成 30 秒,再对关键 job 单独缩短,比“全局很密、个别再放宽”更省资源,也更容易治理。

基数爆炸的典型来源

高基数通常来自不该当标签的字段,例如:

  • user_id、order_id、request_id、完整 URL path
  • 未收敛的 pod 名、临时容器 ID、构建号
  • 把错误信息原文直接塞进 label

一条看似无害的 counter,一旦带上百万级唯一 label 组合,TSDB 头部、内存和 compaction 都会被拖垮。问题往往不是单次 scrape 太大,而是序列数长期只增不减。

落地约束

  1. 标签白名单:只保留 service、env、region、status_code 等低基数维度。
  2. 用 recording rule 做预聚合,查询侧少做大范围 group by。
  3. 为高基数指标设置更短 retention,或降采样进长期存储。
  4. 上线前盯 prometheus_tsdb_head_series 与 scrape duration,而不是只看面板“有没有数”。

小结

Prometheus 的成本曲线对基数极其敏感。宁可少几个花哨维度,也要保住稳定的抓取和可预期的查询延迟。先把间隔策略和标签纪律定清楚,再谈告警规则与看板优化,后续运维会轻松很多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。