Prometheus 时间戳小数问题
对于刚使用 Prometheus 的入门同学,可能对于时间戳有些小的疑问,以下就做一下简单的解答。
我么执行一个范围的查询
windows_net_packets_received_total{nic="Intel_R__Dual_Band_Wireless_AC_7265"}[1m]
查询结果如下图,其中红色字体部分是对应的数据的时间戳。
Prometheus 输出时间戳始终表示为Unix时间戳,以秒为单位。其可以精确到亚秒级精度,所以其会存在小数的部分。
注意:Prometheus 时间选择窗口是没有办法输入到亚秒级精度的,只能精确到秒的级别。
可以通过在线时间戳转换工具,格式化上面的时间戳内容(格式化的时候只是精确到了秒)。
- 1592901576.091 = 2020-06-23 16:39:36
- 1592901591.092 = 2020-06-23 16:39:51
- 1592901606.091 = 2020-06-23 16:40:06
- 1592901621.091 = 2020-06-23 16:40:21
时间戳是正向排序的,可以看出数据的采集周期是 15s ,但是其不是 1、15、30.。。。 正样子。其采集开始的时间有可能不是从 0s 开始的的。
因为控制台上的查询只能使用精确到秒的时间输入,所以在查询的时候会存在误差,这个稍微注意一下。
我们选择时间为 2020-06-23 16:40:06 ,查询最近15s的数据 , 如果是精确到秒的话应该会显示出两个数据。
2020-06-23 16:40:06 和 2020-06-23 16:39:51
实际只是显示了一个点的数据,显示的是最接近的一个点。 (注意这里我切换的新版的UI 可以 localtime zone ,不然时间转换上会有问题,控制台上的时间只能选取不能手动输入) 。
10477890 @1592901591.092 = 2020-06-23 16:39:51
我们直接使用访问的链接可以修改精度。time 修改为 1592901606.091
http://localhost:9090/api/v1/query?query=windows_net_packets_received_total%7Bnic%3D%22Intel_R__Dual_Band_Wireless_AC_7265%22%7D%5B15s%5D&time=1592901606.091
{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"windows_net_packets_received_total","instance":"localhost:9182","job":"windows","nic":"Intel_R__Dual_Band_Wireless_AC_7265"},"values":[[1592901591.092,"10477890"],[1592901606.091,"10477942"]]}]}}
这样返回的结果就是期望中的两个数据了。