抓取限制是什么
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 丢弃确定无用的序列,能让上限真正拦住的只有异常增长,而不是正常业务的自然增量。