1. 程式人生 > 其它 >【小測試】VictoriaMetrics中如何彙總單個time series上的多個data point?

【小測試】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)

}]}}