【博客673】Lookback delta, Staleness and NaN in Prometheus

这篇具有很好参考价值的文章主要介绍了【博客673】Lookback delta, Staleness and NaN in Prometheus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lookback delta, Staleness and NaN in Prometheus

Lookback delta

Lookbackdelta是可以修改的,默认是5分钟

当必须定义“最新”样本时,就会出现棘手的情况。Prometheus 没有样本之间固定间隔的概念,因此很难绝对地说给定series是否存在“当前”最新样本。如果series的最新样本已经有一周了,您可能不希望将其包含在当前时间戳的即时向量选择器的结果中(这将导致图表中出现许多过时的系列“扁平化”)。另一方面,您也不能期望series与评估时间戳完全匹配,因为 Prometheus TSDB 中的样本在某些时间网格上未对齐,并且可以具有任意时间戳。

因此需要某种中间立场。为了选择既不太过时、也不需要超快抓取间隔甚至网格对齐样本时间戳的最新样本,即时向量选择器相对于评估时间戳最多回溯 5 分钟。时间戳早于 5 分钟的样本将从结果中删除。

Staleness

上面的 5 分钟规则是排除旧数据和包含足够新的样本之间的一个很好的折衷方案。然而,在某些情况下,系列在即时向量选择器结果中停留的时间比严格需要的时间长是令人烦恼的。例如,如果您在 Kubernetes 上运行服务并跟踪标签值中的 Pod 名称,则当您重新部署该服务时,所有系列标识(标签集)都会发生变化(因为 Pod 名称发生变化)。您将拥有具有一组 Pod 名称的旧系列和具有一组新名称的新系列。然而,在 5 分钟的时间内,您将在图表中同时看到新系列和旧系列,这可能会令人困惑。如果您基于这些数据进行聚合,那就更令人困惑了。如果您计算所有 Pod 的内存使用量总和,那么在 5 分钟内您将看到您应该看到的总使用量翻倍!

为了解决这个问题,Prometheus 支持将系列标记为显式陈旧:当 Prometheus 检测到一个系列将要灭绝时(因为它的目标已经消失,或者它不再在其目标的抓取中返回,或者因为记录规则停止返回它),普罗米修斯为本系列写下了明确的过时标记。在幕后,过时标记只是 TSDB 中该系列的正常样本,但具有一种特殊的NaN样本值来表示过时。

当即时向量选择器在评估时间戳之前遇到陈旧标记作为最后看到的样本值时,相应的系列将不会包含在结果中。这可以更快地解决“重复计数”和“扁平化”问题。

NaN

在幕后,过时标记只是 TSDB 中该系列的正常样本,但具有一种特殊的NaN样本值来表示过时

源码里对NaN的定义:文章来源地址https://www.toymoban.com/news/detail-500528.html

const (
	// NormalNaN is a quiet NaN. This is also math.NaN().
	NormalNaN uint64 = 0x7ff8000000000001

	// StaleNaN is a signaling NaN, due to the MSB of the mantissa being 0.
	// This value is chosen with many leading 0s, so we have scope to store more
	// complicated values in the future. It is 2 rather than 1 to make
	// it easier to distinguish from the NormalNaN by a human when debugging.
	StaleNaN uint64 = 0x7ff0000000000002
)

// IsStaleNaN returns true when the provided NaN value is a stale marker.
func IsStaleNaN(v float64) bool {
	return math.Float64bits(v) == StaleNaN
}

到了这里,关于【博客673】Lookback delta, Staleness and NaN in Prometheus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【博客669】prometheus rate()选择range范围的最佳实践

    我们使用rate来计算counter的速率,那么rate的range范围应该选择哪一个?有没有固定的答案呢?30s,1m? 答案:没有,要根据你的scrap_interval来决定的 选择范围的一般规则是至少应为刮擦间隔的 4 倍。这是为了允许各种竞争条件,并对失败的刮擦具有弹性。 剖析: 假设您有一个

    2024年02月10日
    浏览(40)
  • 【博客671】prometheus如何选择数据点以及处理counter跳变

    时间是怎么进来的?范围和即时查询! 您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那么如何指定绝对图形时间范围或在表中显示查询结果的时间戳呢?在 PromQL 中,此类时间参数与表达式分开发送到Prometheus 查询 API,确切的时间

    2024年02月11日
    浏览(58)
  • 【博客655】prometheus如何应对告警目标消失带来的评估缺失问题

    基于拉取的监控(例如 Prometheus)的优势之一是,您可以在抓取过程中判断目标是否健康。 关于 Prometheus 的一个常见问题是如何判断服务器是否没有响应或检测样本是否不再从目标中摄取。简单黑盒监控的首选工具是黑盒导出器,您可以使用 unless 和 offset 进行边缘检测,以检

    2024年02月09日
    浏览(72)
  • 【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

    您的 Prometheus 服务器日志中是否遇到过以下错误? 那么您的设置中可能存在配置错误,导致多个系列相互碰撞和冲突。在这篇文章中,我们将解释这些错误背后的背景、可能导致这些错误的原因以及如何调试和修复它们。 Prometheus 是一个实时监控系统,通常只需要随着时间的

    2024年02月11日
    浏览(48)
  • 【博客662】prometheus对rule规则和alert规则作单元测试

    在实际生产中,对于rules和alerts的配置有时候出于某些特殊原因,无法进行模拟,这时候就需要我们对采集规则和告警规则进行单元测试,以确保正确性 example: 要测试此规则,您可以使用以下内容创建 test.yml: 进行测试: 测试结果: 分析一下测试文件: 这表示我们要加载

    2024年02月09日
    浏览(48)
  • 【博客647】MetricsQL(VictoriaMetrics)和PromQL(Prometheus)的不同之处

    https://valyala.medium.com/promql-tutorial-for-beginners-9ab455142085 2-1、MetricsQL 考虑了方括号中窗口之前的前一个点,用于范围函数,例如速率和增加。这允许返回用户对 increase(metric[$__interval]) 查询期望的准确结果,而不是 Prometheus 为此类查询返回的不完整结果 2-2、MetricsQL不推断范围函数

    2024年02月08日
    浏览(65)
  • Ubuntu and Debian(ARMv7) grafana prometheus

    Ubuntu and Debian(ARMv7)SHA256: 4d13652e0bb215fae2338123cd0e98d0755b76076d9ea7e652bea0fd039124e4 sudo apt-get install -y adduser libfontconfig1 musl wget https://dl.grafana.com/enterprise/release/grafana-enterprise_10.0.10_armhf.deb sudo dpkg -i grafana-enterprise_10.0.10_armhf.deb Download Grafana | Grafana Labs Download | Prometheus

    2024年01月21日
    浏览(47)
  • 673. 最长递增子序列的个数

    673. 最长递增子序列的个数 https://leetcode.cn/problems/number-of-longest-increasing-subsequence/description/

    2024年02月11日
    浏览(34)
  • final IN JVM AND JMM

    In JMM (Java Memory Model), the final keyword is used to ensure visibility and immutability in a multi-threaded environment. In Java, the final keyword can be used to modify variables, methods, and classes, as follows: Modifying variables: A variable that is marked as final is immutable, meaning its value cannot be changed after initialization. In a multi-th

    2024年02月09日
    浏览(32)
  • 【LeetCode: 673. 最长递增子序列的个数 | 动态规划】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包