#19730·prometheus

默认超时和验证忽略来自 SD/重标记的每个目标 __scrape_interval__

作者: vincentnonim创建于 2026年9月17日更新于 2026年9月17日

你做了什麽?

  • 背景情况

我将抓取工作移到服务发现(http sd configs)中, SD端点通过Q scrape interval 标签提供每个目标的刮取间隔,所以间隔由中央管理,而不是在每项工作中。 一些出口商在刮出时间时动态地计算出计量标准,需要几分钟的时间来回应,因此它们使用长间隔(5米)和长间隔(4米).

我第一次报告这个针对Vmagent(Victoria Metrics/VictoriaMetrics#11597). Victoria Metrics维护者在调查时将行为与普罗米修斯进行比较,发现普罗米修斯有着相同的根本问题:刮出时间在工作层面解决并验证,然后才知道每个目标QQscrape interval `.

案件A:明确的工作级别超时,由SD提供间隔

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 全球: 刮号( Interval): 1m 刮出时间: 1米

刮号( C):

  • 任务 名称:示例 刮出时间: 4m

不刮出 间隔: 由 SD 提供每个目标

http sd 配置 :


SD 响应 :

贾森
[
{
"目标":["目标.例:9100"],.
"标签": {" scrape interval ":"5m"]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[ . ]

QQ Case B: 从全球范围继承的超时, 工作间隔被 SD 覆盖

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 全球: 刮号( Interval): 1m 刮出时间: 1米

刮号( C):


与上文相同的SD反应(`  scrape interval : 5m').

- 你想看到什么? - 喜欢吗?

在采用自毁标签和再贴标签之后,应对照** 最终/目标** 刮出间隔解决并检查超时问题:

- 案件A:目标通过``  scrape interval  ='5m ' 和`sscrape timeout  ='4m'接受,因为4m < 5m。
- 案件B: `  scrape interval  ="5m""和"`  scrape timeout  =" 1m". 唯一的超时设置是全局1m,相对于每个目标相距5m有效.

你看见了什么? 在什么情况下?

- 案件A:普罗米修斯拒绝加载配置:
`刮出时间超过刮出时间间隔,用于将刮出的时间间隔与工作名称“实例”相匹配'
尽管SD的每个目标都有5米的间隔,但该工作“scrape timeout”与该工作继承的全球间隔(1米)相提并论。

- 案件B:目标得到QQscrape interval  ="5m""和QQscrape timeout  ="40s"". 默认超时在配置负载时间被上限为工作级别间隔(40s),然后这个上限值用于SD提供间隔为5m的目标.

根原因

1. " ScrapeConfig " 。 校验“ 填补与全局的工作间隔, 然后拒绝超过它的明确超时, 或将继承的超时限制在它上( “ min( 全球超时, 工作间隔 ) ”) :
https://GitHub.com/prometheus/prometheus/blob/50461b669f0be3a9f0b31a94f72cde8e98f2779f/config/config.go#L919-L934
2. " PopulateLabels " 设置了来自此工作级别值的 QQscrape timeout ,作为默认目标标签:
. . . . . . .

内容来源: prometheus/prometheus