【小測試】VictoriaMetrics中如何彙總單個time series上的多個data point?
阿新 • • 發佈:2022-04-20
作者:張富春(ahfuzhang),轉載時請註明作者和引用連結,謝謝!
- cnblogs部落格
- zhihu
- Github
-
公眾號:一本正經的瞎扯
問題最終在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)
}]}}