例如,我有 Gauge my_metric。
my_metric{job="1"} 1.0 - at 13:00 - first
my_metric{job="1"} 1.0 - at 13:10
my_metric{job="1"} 1.0 - at 13:20 - last
如何获得从第一个到最后一个指标的timedelta?我需要 13:20 - 13:00 = 20 分钟。
我尝试去做。 我得到了每个指标的时间戳:
timestamp(my_metric))
比我尝试获取增量:
delta(timestamp(my_metric)))
但是有一个错误:
bad_data: invalid parameter "query": 1:7: parse error: expected type range vector in call to function "delta", got instant vector
如果我尝试从
timestamp
获取范围向量:
delta(timestamp(my_metric))[1h])
我有一个错误:
bad_data: invalid parameter "query": 1:67: parse error: ranges only allowed for vector selectors
您可以尝试使用 PromQL 子查询 和
increase
函数:
increase(
timestamp(my_metric)[30d:1m]
)
这种方法有以下缺点:
函数中的外推,它可能会返回不正确的结果。
它可能会很慢,因为 Prometheus 按每个
step
间隔计算子查询结果,其中 step
是持续时间,位于方括号中的冒号后面(它等于上面查询中的一分钟 (1m
)) .
方括号中的后视窗口必须覆盖整个时间序列,包括第一个和最后一个原始样本。如果不是这样,那么返回的结果将低于预期。
中有一个
lifetime()
函数 - 这是我使用的与 PromQL 兼容的查询语言。该函数可以简化计算时间序列的生命周期。