首页/云/可观测性速查/抓取限制:sample_limit 与标签上限保护
Prometheus 与采集64 条

抓取限制:sample_limit 与标签上限保护

每个抓取任务可配置样本数与标签长度上限,防止单个目标的指标爆炸拖垮采集端;超限时该次抓取被整体判定为失败,而不是部分丢弃。

可观测性速查云更新于 2026-10-13

抓取限制是什么

Prometheus 允许给每个抓取任务设置上限:单次抓取的样本数、单条样本的标签数量、标签名与标签值的长度、响应体大小。这些参数是防止单个目标指标爆炸拖垮整个采集端的护栏。关键在于判定方式——超限时该次抓取整体判定失败、样本全部丢弃,而不是只丢掉超出的部分,所以阈值定得是否合理直接决定会不会出现「整目标无数据」。

基本信息

适用平台Prometheus 2.x 抓取配置 scrape_configs
常用参数sample_limit、label_limit、label_value_length_limit、body_size_limit
判定时机在 metric_relabel_configs 之后执行
超限后果该次抓取失败,指标整体缺失并记录错误

典型使用场景

  • 多租户共享采集端:给每个任务设样本上限,避免互相影响
  • 防止应用指标爆炸:新版 SDK 或误加动态标签时及时暴露问题
  • 控制抓取开销:限制响应体大小,避免拉取超大指标页
  • 标签规范治理:用标签上限拦住超长标签值
  • 容量规划:按上限统计各任务实际占用,为扩容提供依据

配置示例

配置示例
- job_name: app
  sample_limit: 10000             # 单次抓取样本数上限,0 表示不限
  label_limit: 60                 # 单条样本的标签数量上限
  label_name_length_limit: 200    # 标签名长度上限
  label_value_length_limit: 500   # 标签值长度上限
  body_size_limit: 50MB           # 响应体大小上限
  metric_relabel_configs:         # 先按规则丢弃无用指标,再受上限约束
    - source_labels: [__name__]
      regex: "http_request_duration_seconds_.*"
      action: drop
# 上限判定发生在重写之后:先丢掉不需要的序列,阈值才有腾挪空间

参数与取值建议

参数作用取值思路
sample_limit单次抓取样本总数上限按正常样本数的 2 到 3 倍设置
label_limit单条样本标签数上限明显超过的样本多半是标签设计问题
label_value_length_limit标签值长度上限防止把请求 ID 写进标签
body_size_limit响应体大小上限大指标页通常意味着基数失控
scrape_timeout单次抓取超时需小于抓取间隔
上限设得过小会让目标每次抓取都整体失败、指标完全缺失;排查时先看采集端日志里的超限报错,再去调整阈值而不是先怀疑应用。
先重写再限流是推荐顺序:用 metric_relabel_configs 丢弃确定无用的序列,能让上限真正拦住的只有异常增长,而不是正常业务的自然增量。

易错点

  • 把上限当成硬性清理手段,阈值设得过低导致整目标抓取失败,指标全线缺失
  • 示例里的正则要按实际指标名替换,正则写错时丢弃不生效,上限照样被触发
  • 忽略超限是整体判定失败这一事实,误以为只是丢部分样本,排查方向完全跑偏
  • 没有为上限配置监控告警,超限后靠用户发现指标缺失,故障时间被拉长

数据来源与参考

  • Prometheus 文档 · scrape_config
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌