作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


问题最终在andy专家的帮助下解决,但是内部的原理还是很迷惑。

1.如何知道一个time series在一段时间内有多少个data point?

我用了这个笨办法来解决:

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query_range" --data-urlencode 'query=metric_count_rpc{metrics_name="xx"}' --data-urlencode 'timeout=10s' --data-urlencode 'start=1650440880' --data-urlencode "step=1s" --data-urlencode 'end=1650440939'
  • 开始时间:2022-04-20 15:48:00
  • 结束时间:2022-04-20 15:48:59
  • step=1s,这个很重要
  • 返回了61条数据(为什么不是60条,不明白)
  • 返回最小时间:2022-04-20 15:48:00
  • 返回最大时间:2022-04-20 15:59:09 (为什么超出了我指定的时间范围,不明白)
  • 有四种不同的值,猜测正确的data point是4条

    (数据的格式请见最后)

1.1 如何刚好指定四条数据产生的时间,能不能查出来?

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query_range" --data-urlencode 'query=metric_count_rpc{metrics_name="xx"}' --data-urlencode 'timeout=10s' --data-urlencode 'start=1650441500' --data-urlencode "step=1s" --data-urlencode 'end=1650441530'
  • 开始时间:2022-04-20 15:48:20
  • 结束时间:2022-04-20 15:48:50

    同样能查询出四个不同的data point值。

1.2 查询下一分钟的数据会怎么样?

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query_range" --data-urlencode 'query=metric_count_rpc{metrics_name="xx"}' --data-urlencode 'timeout=10s' --data-urlencode 'start=1650441540' --data-urlencode "step=1s" --data-urlencode 'end=1650441599'
  • 开始时间:2022-04-20 15:49:00
  • 结束时间:2022-04-20 15:49:59
  • 出现了上一分钟的最后一个值 (郁闷啊……为什么呢)

1.3 下一分钟,故意错开上次查询的时间范围,会怎么样?

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query_range" --data-urlencode 'query=metric_count_rpc{metrics_name="xx"}' --data-urlencode 'timeout=10s' --data-urlencode 'start=1650441551' --data-urlencode "step=1s" --data-urlencode 'end=1650441599'
  • 开始时间:2022-04-20 15:49:11
  • 结束时间:2022-04-20 15:49:59
  • 查询结果为空,没有出现上一分钟的值了 (我擦,既然这一分钟没有值,时间范围为什么又与上一分钟相关?)

2.如何汇总一分钟内的data point

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query" --data-urlencode 'query=sum_over_time(metric_count_rpc{metrics_name="xx"}[1m])' --data-urlencode 'timeout=10s' --data-urlencode 'time=1650441539'
  • 查询方式: query (instant,瞬时值)
  • 查询的时间点:2022-04-20 15:48:59
  • 汇总表达式:sum_over_time(metric_count_rpc{metrics_name="xx"}[1m])
  • 结果正好等于上面四个不同的data point汇总起来的值
  • 从行为来看,查询汇总了从time这个时间点倒数一分钟的data point

2.1 在下一分钟的开始汇总呢?

  1. curl -G "http://11.145.xx.xx/select/0/prometheus/api/v1/query" --data-urlencode 'query=sum_over_time(metric_count_rpc{metrics_name="xx"}[1m])' --data-urlencode 'timeout=10s' --data-urlencode 'time=1650441540'
  • 查询的时间点:2022-04-20 15:49:00
  • 结果是把上一分钟的最后的三个data point汇总起来了
  • 但是上一分钟的第一个data point 在2022-04-20 15:48:20, 按照时间窗口1分钟来计算的话,结果应该与上一分钟一样才对。

总而言之,这个对齐方式好奇怪,我还没理解

附录

query_range返回的数据格式

  1. {"status":"success","isPartial":false,"data":{"resultType":"matrix","result":[{"metric":{"__name__":"metric_count_rpc"},"values":
  2. [[1650441480,"1485340"], //datetime.datetime(2022, 4, 20, 15, 58) //21条
  3. [1650441481,"1485340"],
  4. [1650441482,"1485340"],
  5. [1650441483,"1485340"],
  6. [1650441484,"1485340"],
  7. [1650441485,"1485340"],
  8. [1650441486,"1485340"],
  9. [1650441487,"1485340"],
  10. [1650441488,"1485340"],
  11. [1650441489,"1485340"],
  12. [1650441490,"1485340"],
  13. [1650441491,"1485340"],
  14. [1650441492,"1485340"],
  15. [1650441493,"1485340"],
  16. [1650441494,"1485340"],
  17. [1650441495,"1485340"],
  18. [1650441496,"1485340"],
  19. [1650441497,"1485340"],
  20. [1650441498,"1485340"],
  21. [1650441499,"1485340"],
  22. [1650441500,"1485340"], //中间为什么空了10秒?
  23. [1650441510,"1433340"], //10条
  24. [1650441511,"1433340"],
  25. [1650441512,"1433340"],
  26. [1650441513,"1433340"],
  27. [1650441514,"1433340"],
  28. [1650441515,"1433340"],
  29. [1650441516,"1433340"],
  30. [1650441517,"1433340"],
  31. [1650441518,"1433340"],
  32. [1650441519,"1433340"],
  33. [1650441520,"1294595"], //10条
  34. [1650441521,"1294595"],
  35. [1650441522,"1294595"],
  36. [1650441523,"1294595"],
  37. [1650441524,"1294595"],
  38. [1650441525,"1294595"],
  39. [1650441526,"1294595"],
  40. [1650441527,"1294595"],
  41. [1650441528,"1294595"],
  42. [1650441529,"1294595"],
  43. [1650441530,"1254335"], //datetime.datetime(2022, 4, 20, 15, 58, 50) //20条
  44. [1650441531,"1254335"],
  45. [1650441532,"1254335"],
  46. [1650441533,"1254335"],
  47. [1650441534,"1254335"],
  48. [1650441535,"1254335"],
  49. [1650441536,"1254335"],
  50. [1650441537,"1254335"],
  51. [1650441538,"1254335"],
  52. [1650441539,"1254335"],
  53. [1650441540,"1254335"],
  54. [1650441541,"1254335"],
  55. [1650441542,"1254335"],
  56. [1650441543,"1254335"],
  57. [1650441544,"1254335"],
  58. [1650441545,"1254335"],
  59. [1650441546,"1254335"],
  60. [1650441547,"1254335"],
  61. [1650441548,"1254335"],
  62. [1650441549,"1254335"]] //datetime.datetime(2022, 4, 20, 15, 59, 9)
  63. }]}}

【小测试】VictoriaMetrics中如何汇总单个time series上的多个data point?的更多相关文章

  1. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  2. 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...

  3. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  4. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...

  5. 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本

    ​    ​接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...

  6. selenium 测试框架中使用grid

    之前的测试框架:http://www.cnblogs.com/tobecrazy/p/4553444.html 配合Jenkins可持续集成:http://www.cnblogs.com/tobecr ...

  7. 微信小程序(应用号)资源汇总整理

    微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...

  8. Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试

    CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...

  9. LoadRunner测试场景中添加负载生成器

    如何在LoadRunner测试场景中添加负载生成器 本文对如何在LoadRunner的测试场景中添加负载生成器,如何使用负载生成器的方法,总结形成操作指导手册,以指导测试人员指导开展相关工作. 1.什 ...

  10. ArcGIS中如何导出单个矢量要素图形

    原文:ArcGIS中如何导出单个矢量要素图形 在ARCGIS中载入了一张含有省界的中国地图,是SHP文件.现在我只想要其中一块地区的,实现方法如下: 加入到ArcGIS后,右击图层,打开属性表(att ...

随机推荐

  1. ​Black Hat 2022 聚焦软件供应链安全

    Black Hat 大会被公认为世界信息安全行业最权威大会,也是在全球范围内最具有技术性的信息安全大会.Black Hat USA 聚焦网络安全事件,并且持续向外界输出前沿安全技术研究成果以及行业发展 ...

  2. 火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   作为目前中国市场领跑的头部XR品牌之一,字节跳动旗下的PICO已经拥有了超百万客户.   过去一年,PICO在 ...

  3. 火山引擎 DataLeap 套件下构建数据目录(Data Catalog)系统的实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 Data Catalog 产品,通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解 ...

  4. 开启一个 A/B 实验到底有多简单?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 火山引擎 A/B 测试平台 DataTester 孵化于字节跳动业务内部,在字节跳动,"万事皆 A/B, ...

  5. 基于jdk自带httpserver开发的最小完整MVC框架

    基于jdk自带httpserver开发的最小完整MVC框架 410kb级的完整MVC:solon(83k) + jdkhttp(27k) + enjoy(227k) + snack3(73k) DEM ...

  6. 浅谈sql执行流程、innodb架构设计、buffer pool缓冲池

    一.从服务端到数据库sql执行流程: 1.SQL接口:负责处理接收到sql的语句 2.查询解析器:负责将sql变成数据库可以看懂的语言 3.查询优化器:选择最优的查询路径(针对你编写的复杂sql语句生 ...

  7. 函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务

    作者| 阿里云Serverless技术专家 澈尔 当前阿里云函数计算支持两种类型的函数:事件函数和 HTTP 函数.其中 HTTP 函数结合 HTTP 触发器,能够支持用户直接通过 HTTP 请求利用 ...

  8. tinymce富文本编辑器升级问题

    突然这样,之前好好地.

  9. docker目录迁移流程

    概述 在安装测试最新版本的HOMER7的过程中,docker作为基础工具碰到一些问题,针对问题进行总结. docker的默认工作目录在/var目录,而在我们的环境中,/var目录空间预留不足,随着do ...

  10. jdk与tomcat的安装部署(CentOS8)(VM)

    一.登陆CentOS8 通过VMware Workstation登陆CentOS8系统   二.VMware Tools安装 1.找到VMware Tools对应文件: VMwareTools-10. ...