Prometheus 中的increase() 有时会将值加倍:如何避免?

2023-12-23

我发现对于某些图表,我从 Prometheus 获得双精度值,其中应该只是一个:

我使用的查询:

increase(signups_count[4m])

刮擦间隔设置为建议最大 https://stackoverflow.com/questions/40230057/what-is-the-maximum-scrape-interval-in-prometheus2分钟。

如果我查询实际存储的数据:

curl -gs 'localhost:9090/api/v1/query?query=(signups_count[1h])'

"values":[
     [1515721365.194, "579"],
     [1515721485.194, "579"],
     [1515721605.194, "580"],
     [1515721725.194, "580"],
     [1515721845.194, "580"],
     [1515721965.194, "580"],
     [1515722085.194, "580"],
     [1515722205.194, "581"],
     [1515722325.194, "581"],
     [1515722445.194, "581"],
     [1515722565.194, "581"]
],

我看到只有两次增加。事实上,如果我查询这些时间,我会看到预期的结果:

curl -gs 'localhost:9090/api/v1/query_range?step=4m&query=increase(signups_count[4m])&start=1515721965.194&end=1515722565.194'

"values": [
     [1515721965.194, "0"],
     [1515722205.194, "1"],
     [1515722445.194, "0"]
],

但 Grafana(以及 GUI 中的 Prometheus)倾向于设置不同的step对于一个不熟悉 Prometheus 内部工作原理的人来说,我得到了一个非常意想不到的结果。

curl -gs 'localhost:9090/api/v1/query_range?step=15&query=increase(signups_count[4m])&start=1515721965.194&end=1515722565.194'

... skip ...
 [1515722190.194, "0"],
 [1515722205.194, "1"],
 [1515722220.194, "2"],
 [1515722235.194, "2"],
... skip ...

知道increase()只是用于特定用例的语法糖rate()功能 https://stackoverflow.com/questions/38659784/graphing-slow-counters-with-prometheus-and-grafana,我想在这种情况下它应该是这样工作的。

如何避免此类情况的发生?我如何让 Prometheus/Grafana 在大多数情况下向我显示一对一、二对二?除了增加刮擦间隔(这将是我的最后手段)。

我明白普罗米修斯,所以如果我不是在任何时候,而是在大多数时间都有一个好的数字,那对我来说很好。

我在这里还缺少什么?


这被称为aliasing https://en.wikipedia.org/wiki/Aliasing是信号处理中的一个基本问题。您可以通过提高采样率来稍微改进这一点,4m 范围对于 2m 范围来说有点短。尝试 10m 范围。

例如,在 1515722220 处执行的查询只能看到[电子邮件受保护] /cdn-cgi/l/email-protection and [电子邮件受保护] /cdn-cgi/l/email-protection样品。 2 分钟内增加了 1,由此推断 4 分钟内增加了 2 - 这符合预期。

任何基于指标的监控系统都会有类似的工件,如果您想要 100% 的准确性,则需要日志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prometheus 中的increase() 有时会将值加倍:如何避免? 的相关文章

随机推荐

  • 在 Postman 中使用不同的数据多次运行请求仅运行一次

    我是 Postman 的新手 经常遇到一个我无法解决的问题 我尝试使用在预请求脚本上建立的数据数组多次运行相同的请求 但是 当我转到运行程序时 请求仅运行一次 而不是 3 次 预请求脚本 var uuids pm environment g
  • Scipy.optimize 不等式约束 - 考虑不等式的哪一边?

    我正在使用 scipy optimize 模块来查找最佳输入权重 以最小化我的输出 从我见过的例子来看 我们用单边方程定义约束 然后我们创建一个 不等式 类型的变量 我的问题是优化包如何知道约束中变量的总和是否需要小于 1 还是大于 1 d
  • 退出时关闭 Visual Studio 中的所有文件

    有没有办法在退出时关闭 Visual Studio 中的所有文件 或者 如果不可能 是否可以删除 Visual Studio 在退出时创建的用户项目文件 Windows gt 关闭所有文档文件 gt 退出 或者在项目关闭后手动删除 sou文
  • 如何从 COBOL 中的 COMP-3 字段读取 Java 中的日期?

    我正在尝试使用读取 COBOL 数据文件JRecord http sourceforge net projects jrecord source typ redirect 因为我有一个标题记录和详细记录 所以我用 SPLIT 01 LEVE
  • 当拉取请求更改时取消操作运行

    对于我的项目 我有一个相当长的 github 操作 当创建新的拉取请求时会触发该操作 这些是我使用的触发器 on pull request types opened ready for review labeled 此操作被定义为我的拉取请
  • 为什么 HttpApplication 构造函数被多次调用

    有人可以解释为什么自定义类的构造函数派生自Http应用程序应用程序启动时被调用多次 我的代码结构如下 My Globalglobal asax 中的类派生自定制应用程序 class The 定制应用程序类源自Http应用程序 class T
  • 如何从 CXF/JAX-RS 中的 JSON 响应中删除命名空间前缀?

    我有 CXF 使用 JAX RS 创建的以下响应 ns1 CustomerInformationResponse xsi type ns1 CustomerInformationResponse ns2 code SUCCESS ns1 c
  • 如何更改函数引用的类型?

    Java8 允许我使用方法声明作为任何接口的实现 只要它只包含一个方法 然而 一旦定义 类型就不能更改 My code import java util function IntConsumer public class A interfa
  • boost::asio::yield_context:意外的forced_unwind异常

    我正在尝试为 boost asio 编写自定义异步函数 如下所述here https stackoverflow com questions 24497881 boostasiospawn yield as callback 但是我得到了
  • 如何在 Android 10 中从服务启动 Activity

    我从服务开始活动直到 android P 但是从 android10 谷歌保留了一项限制 即活动不能从后台启动 https developer android com guide components activities backgrou
  • 使用连接字符串时如何设置 knex 连接 ssl 选项

    当我使用连接字符串初始化 knex 时 如何将连接的 ssl 属性设置为 true 同样如何将debug设置为true 我通常会传入一个连接对象 但在这种情况下 我必须使用环境变量中的连接字符串 var database client pg
  • 检测页面上是否显示警报或确认

    有没有办法使用 JavaScript 或 jQuery 来检测是否显示确认框或警报框 如果您想在以下情况下运行一些代码alert 火灾 你可以尝试这样的事情 我只在 Chrome 中进行了测试 所以我不确定浏览器是否支持 Example h
  • C++ 不会安装在 Netbeans 11.0 中

    我是编程初学者 想了解更多关于 C 的知识 我安装了 Netbeans 因为它说它支持 Java 我目前正在学校学习基础知识 和 C 我想出于个人兴趣学习 但是当我尝试创建一个新项目时 我找不到C 所以我按照教程并最终尝试安装该插件 问题是
  • 什么时候在 ThreadPoolExecutor 中指定单独的核心和最大池大小是个好主意?

    我试图理解为 Java 5 的 ThreadPoolExecutor 指定单独的核心和最大池大小的要点 我的理解是 线程数只有在队列已满时才会增加 这似乎有点晚了 至少对于较大的队列 难道我不乐意为任务分配更多数量的线程 在这种情况下我可能
  • 迷失在 NSButton 类型和替代图像中

    我想要一个NSButton带有图像和备用图像 按下按钮时应显示备用图像 我还想通过代码显示备用图像 调用类似 button setSelected YES 这是否可能无需与alternateImage用手财产 无需手动更改按钮的图像即可实现
  • Java:使用 SAXParser 拆分大型 XML 文件

    我正在尝试使用java将一个大的XML文件分割成更小的文件SAXParser 特别是维基百科转储 未压缩时大约有 28GB 我有一个Pagehandler扩展的类DefaultHandler private class PageHandle
  • 在Python中对两个文本文件进行类似SQL的JOIN,有内置的方法吗?

    我必须执行的一项常见任务是对两个文本文件执行类似 SQL 的 JOIN 即 使用在它们之间共享的标识符列上的某种联接 从 左手 和 右手 文件创建一个新文件 有时需要诸如外连接等变化 当然 我可以编写一个简单的脚本来以通用方式执行此操作 但
  • 时间序列预测(最终使用Python)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 What algorithms exist for time series forecasting r
  • 使用 Perl 使用 sendmail 发送电子邮件

    我正在遵循以下示例这个网站 http www tutorialspoint com perl perl sending email htm使用 Perl 发送电子邮件 代码看起来像这样 my hostname hostname my thi
  • Prometheus 中的increase() 有时会将值加倍:如何避免?

    我发现对于某些图表 我从 Prometheus 获得双精度值 其中应该只是一个 我使用的查询 increase signups count 4m 刮擦间隔设置为建议最大 https stackoverflow com questions 4