【小测试】VictoriaMetrics中如何汇总单个time series上的多个data point?
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
问题最终在andy专家的帮助下解决,但是内部的原理还是很迷惑。
1.如何知道一个time series在一段时间内有多少个data point?
我用了这个笨办法来解决:
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 如何刚好指定四条数据产生的时间,能不能查出来?
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 查询下一分钟的数据会怎么样?
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 下一分钟,故意错开上次查询的时间范围,会怎么样?
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
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 在下一分钟的开始汇总呢?
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返回的数据格式
{"status":"success","isPartial":false,"data":{"resultType":"matrix","result":[{"metric":{"__name__":"metric_count_rpc"},"values":
[[1650441480,"1485340"], //datetime.datetime(2022, 4, 20, 15, 58) //21条
[1650441481,"1485340"],
[1650441482,"1485340"],
[1650441483,"1485340"],
[1650441484,"1485340"],
[1650441485,"1485340"],
[1650441486,"1485340"],
[1650441487,"1485340"],
[1650441488,"1485340"],
[1650441489,"1485340"],
[1650441490,"1485340"],
[1650441491,"1485340"],
[1650441492,"1485340"],
[1650441493,"1485340"],
[1650441494,"1485340"],
[1650441495,"1485340"],
[1650441496,"1485340"],
[1650441497,"1485340"],
[1650441498,"1485340"],
[1650441499,"1485340"],
[1650441500,"1485340"], //中间为什么空了10秒?
[1650441510,"1433340"], //10条
[1650441511,"1433340"],
[1650441512,"1433340"],
[1650441513,"1433340"],
[1650441514,"1433340"],
[1650441515,"1433340"],
[1650441516,"1433340"],
[1650441517,"1433340"],
[1650441518,"1433340"],
[1650441519,"1433340"],
[1650441520,"1294595"], //10条
[1650441521,"1294595"],
[1650441522,"1294595"],
[1650441523,"1294595"],
[1650441524,"1294595"],
[1650441525,"1294595"],
[1650441526,"1294595"],
[1650441527,"1294595"],
[1650441528,"1294595"],
[1650441529,"1294595"],
[1650441530,"1254335"], //datetime.datetime(2022, 4, 20, 15, 58, 50) //20条
[1650441531,"1254335"],
[1650441532,"1254335"],
[1650441533,"1254335"],
[1650441534,"1254335"],
[1650441535,"1254335"],
[1650441536,"1254335"],
[1650441537,"1254335"],
[1650441538,"1254335"],
[1650441539,"1254335"],
[1650441540,"1254335"],
[1650441541,"1254335"],
[1650441542,"1254335"],
[1650441543,"1254335"],
[1650441544,"1254335"],
[1650441545,"1254335"],
[1650441546,"1254335"],
[1650441547,"1254335"],
[1650441548,"1254335"],
[1650441549,"1254335"]] //datetime.datetime(2022, 4, 20, 15, 59, 9)
}]}}
【小测试】VictoriaMetrics中如何汇总单个time series上的多个data point?的更多相关文章
- PHP中使用PDO操作事务的一些小测试
关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...
- 微信小程序开发教程 #043 - 在小程序开发中使用 npm
本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...
- 总结微信小程序开发中遇到的坑
总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...
- 测试开发中Django和Flask框架
Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...
- 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本
接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...
- selenium 测试框架中使用grid
之前的测试框架:http://www.cnblogs.com/tobecrazy/p/4553444.html 配合Jenkins可持续集成:http://www.cnblogs.com/tobecr ...
- 微信小程序(应用号)资源汇总整理
微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...
- Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...
- LoadRunner测试场景中添加负载生成器
如何在LoadRunner测试场景中添加负载生成器 本文对如何在LoadRunner的测试场景中添加负载生成器,如何使用负载生成器的方法,总结形成操作指导手册,以指导测试人员指导开展相关工作. 1.什 ...
- ArcGIS中如何导出单个矢量要素图形
原文:ArcGIS中如何导出单个矢量要素图形 在ARCGIS中载入了一张含有省界的中国地图,是SHP文件.现在我只想要其中一块地区的,实现方法如下: 加入到ArcGIS后,右击图层,打开属性表(att ...
随机推荐
- PPT 动画-多层旋转(圆角三角形)
多层旋转动画 插入若干个三解形 然后将页面切换成[平滑](Office 2019~ 365 才有这功能,或者 iSlide 平滑过渡)
- SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新.升级方式,防止多次重复执行 Oracle 项目中 SQL 脚本更新方式 一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺 ...
- 万物皆可秒——淘宝秒杀Python脚本,扫货618,备战双11!
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 总是抢不到想要的宝贝?试试Python脚本 对于淘宝.天猫,相信大家已经无比的熟悉,在每年的双十一.双十 ...
- JSP | IDEA中部署tomcat,运行JSP文件,编译后的JSP文件存放地点总结
首先保证你正常部署了Tomcat,并且正常在浏览器中运行了JSP文件. 参考博客:Here 那么Tomcat编译后的JSP文件(_jsp.class 和 _jsp.java)的存放地点: (一)一般存 ...
- Codeforces Round #717 (Div. 2) 个人题解 A~C (A思維,B位運算,C背包DP)
1516A. Tit for Tat 題意: 給定大小為 \(n\) 的數組和可操作次數 \(k\) , 每次操作都選定兩個數(如果 \(1 \le a_i\) ),使第一個數 - \(1\) ,另一 ...
- Codeforces Round #706 Editorial
1496A. Split it! 类回文判断,只要 k = 0 或者 \(s[1,k] 和 s[n - k + 1,n]\)是回文即可 特判情况 n < 2 * k + 1 为 NO int m ...
- SpringCloud学习 系列十、服务熔断与降级(3-类级别的服务降级)
系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...
- java对excle操作:下载、上传以及上传中错误数据动态生成excle给用户下载
工作中经常遇到excle文件的上传下载,这里就总结一下相关的操作,尤其是最后一个方法"上传excle文件校验数据格式,挑出格式错误的数据"网上没有找到相关的例子,自己组合改写了一下 ...
- C#设计模式09——组合模式的写法
1. 什么是C#组合模式? 组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示"整体/部分"层次结构.使用此模式,客户端可以按相同的方式处理单个对象和对象集合,而不必关 ...
- P1914 小书童——凯撒密码
1.题目介绍 小书童--凯撒密码 题目背景 某蒟蒻迷上了 "小书童",有一天登陆时忘记密码了(他没绑定邮箱 or 手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但 ...
