最近值或最后看到的值
Most recent value or last seen value
Prometheus 是围绕返回指标的 时间序列 表示而构建的。然而,在许多情况下,我只关心指标的状态 现在 ,而且我很难找到一种可靠的方法来获取 "most recent" 指标值。
因为现在它每 30 秒获取一次指标,我尝试了这样的事情:
my_metric[30s]
但这感觉很脆弱。如果数据点之间的指标日期超过或少于 30 秒,那么我要么得到一个以上的结果,要么得到零个结果。
如何获取指标的最新值?
您只需要 my_metric
,默认情况下 return 最近的值不超过 5 分钟。
鉴于此:
namespace_metricname_count_sum{id="1",status="to-do"}
namespace_metricname_count_sum{id="1",status="in-progress"}
如果您想获得最新的值,您需要使用在这种情况下共有的值 id=~".*"
通过对日志进行分组,您将能够获得某个时间范围内的最后一个值
count ( max_over_time ( namespace_metricname_count_sum{id=~".*"}[12h])) by (status)
我通过 prom/cloudwatch-exporter 从 AWS 获取的指标也遇到了类似的问题。 AWS 似乎需要一段时间才能收敛其 CloudWatch 指标。过去大约需要 10 分钟,但现在更像是 13 分钟。我们一直在遗漏磁盘 space 低等问题,因为这些指标完全无法到达普罗米修斯,因此我们的警报毫无用处。
我发现 "offset" 在这里很有用,我想要最后一个指标,但它在 5 米截止范围之外。因此,通过指定一个偏移量,我仍然可以获取一个值而不是什么都没有。示例:
aws_ec2_cpuutilization_average offset 15m
要获取 my_metric
早于 5m 的最新值而不诉诸 hacky PromQL 查询,您可以修改 query.lookback-delta
Prometheus 选项,它是定义此默认 5m
值的位置。
例如,在您的 Prometheus 启动选项中指定 --query.lookback-delta=1d
并重新启动服务将导致 PromQL 查询 my_metric
到 return my_metric
查找的最新值倒退 24 小时。
此“回顾时间 window”之外的指标称为 stale。
如果您使用 Prometheus 直接使用 query_range API 端点,您将获得时间序列.如果切换到 query API 端点,您将获得最后一个值。
在 Grafana 中,您可以通过切换 Instant-toggle 从时间序列切换到最后一个值。
默认情况下,Prometheus returns 如果它们是在过去 5 分钟内发布的最新值。这个 lookbehind window 被称为 lookback delta
并且可以使用 --query.lookback-delta
command-line 标志进行配置。请参见 these docs for more information. The lookbehind window can be augmented on a per-query basis via last_over_time() 函数。例如,以下查询 returns 名称为 my_metric
的时间序列的最新值(如果这些值在过去一小时内可用):
last_over_time(my_metric[1h])
Prometheus 是围绕返回指标的 时间序列 表示而构建的。然而,在许多情况下,我只关心指标的状态 现在 ,而且我很难找到一种可靠的方法来获取 "most recent" 指标值。
因为现在它每 30 秒获取一次指标,我尝试了这样的事情:
my_metric[30s]
但这感觉很脆弱。如果数据点之间的指标日期超过或少于 30 秒,那么我要么得到一个以上的结果,要么得到零个结果。
如何获取指标的最新值?
您只需要 my_metric
,默认情况下 return 最近的值不超过 5 分钟。
鉴于此:
namespace_metricname_count_sum{id="1",status="to-do"}
namespace_metricname_count_sum{id="1",status="in-progress"}
如果您想获得最新的值,您需要使用在这种情况下共有的值 id=~".*"
通过对日志进行分组,您将能够获得某个时间范围内的最后一个值
count ( max_over_time ( namespace_metricname_count_sum{id=~".*"}[12h])) by (status)
我通过 prom/cloudwatch-exporter 从 AWS 获取的指标也遇到了类似的问题。 AWS 似乎需要一段时间才能收敛其 CloudWatch 指标。过去大约需要 10 分钟,但现在更像是 13 分钟。我们一直在遗漏磁盘 space 低等问题,因为这些指标完全无法到达普罗米修斯,因此我们的警报毫无用处。
我发现 "offset" 在这里很有用,我想要最后一个指标,但它在 5 米截止范围之外。因此,通过指定一个偏移量,我仍然可以获取一个值而不是什么都没有。示例:
aws_ec2_cpuutilization_average offset 15m
要获取 my_metric
早于 5m 的最新值而不诉诸 hacky PromQL 查询,您可以修改 query.lookback-delta
Prometheus 选项,它是定义此默认 5m
值的位置。
例如,在您的 Prometheus 启动选项中指定 --query.lookback-delta=1d
并重新启动服务将导致 PromQL 查询 my_metric
到 return my_metric
查找的最新值倒退 24 小时。
此“回顾时间 window”之外的指标称为 stale。
如果您使用 Prometheus 直接使用 query_range API 端点,您将获得时间序列.如果切换到 query API 端点,您将获得最后一个值。
在 Grafana 中,您可以通过切换 Instant-toggle 从时间序列切换到最后一个值。
默认情况下,Prometheus returns 如果它们是在过去 5 分钟内发布的最新值。这个 lookbehind window 被称为 lookback delta
并且可以使用 --query.lookback-delta
command-line 标志进行配置。请参见 these docs for more information. The lookbehind window can be augmented on a per-query basis via last_over_time() 函数。例如,以下查询 returns 名称为 my_metric
的时间序列的最新值(如果这些值在过去一小时内可用):
last_over_time(my_metric[1h])