Prometheus的四種數據類型
-
counter (只增不減 計數)
-
Gauge (常規數值 可變化大小)
-
histogram (柱狀圖 小於上邊界的 總數與次數)
-
summary (分位數 小於自定義值的百分比 總數與次數)
Counter類型(只增不減 重啟清空)
Counter是計數器類型:
- 1、Counter 用於累計值,例如記錄請求次數、任務完成數、錯誤發生次數。
- 2、一直增加,不會減少。
- 3、重啟進程后,會被重置。
例如:http_response_total{method="GET",endpoint="/api/tracks"} 100 http_response_total{method="GET",endpoint="/api/tracks"} 160
Counter 類型數據可以讓用戶方便的了解事件產生的速率的變化,在PromQL內置的相關操作函數可以提供相應的分析,比如以HTTP應用請求量來進行說明:
1、通過rate()函數獲取HTTP請求量的增長率 rate(http_requests_total[5m]) 2、查詢當前系統中,訪問量前10的HTTP地址 topk(10, http_requests_total)
Gauge類型(可變化)
Gauge是測量器類型:
- 1、Gauge是常規數值,例如溫度變化、內存使用變化。
- 2、可變大,可變小。
- 3、重啟進程后,會被重置
例如: memory_usage_bytes{host="master-01"} 100 memory_usage_bytes{host="master-01"} 30 memory_usage_bytes{host="master-01"} 50 memory_usage_bytes{host="master-01"} 80
對於 Gauge 類型的監控指標,通過 PromQL 內置函數 delta() 可以獲取樣本在一段時間內的變化情況,例如,計算 CPU 溫度在兩小時內的差異:
dalta(cpu_temp_celsius{host="zeus"}[2h])
你還可以通過PromQL 內置函數 predict_linear() 基於簡單線性回歸的方式,對樣本數據的變化趨勢做出預測。例如,基於 2 小時的樣本數據,來預測主機可用磁盤空間在 4 個小時之后的剩余情況:
predict_linear(node_filesystem_free{job="node"}[2h], 4 * 3600) < 0
histogram(柱狀圖)
histogram是柱狀圖,在Prometheus系統的查詢語言中,有三種作用:
- 1、在一段時間范圍內對數據進行采樣(通常是請求持續時間或響應大小等),並將其計入可配置的存儲桶(bucket)中. 后續可通過指定區間篩選樣本,也可以統計樣本總數,最后一般將數據展示為直方圖。
- 2、對每個采樣點值累計和(sum)
- 3、對采樣點的次數累計和(count)
度量指標名稱: [basename]_上面三類的作用度量指標名稱
1、[basename]_bucket{le="上邊界"}, 這個值為小於等於上邊界的所有采樣點數量 2、[basename]_sum 3、[basename]_count
小結:如果定義一個度量類型為Histogram,則Prometheus會自動生成三個對應的指標
為什需要用histogram柱狀圖?
在大多數情況下人們都傾向於使用某些量化指標的平均值,例如 CPU 的平均使用率、頁面的平均響應時間。這種方式的問題很明顯,以系統 API 調用的平均響應時間為例:如果大多數 API 請求都維持在 100ms 的響應時間范圍內,而個別請求的響應時間需要 5s,那么就會導致某些 WEB 頁面的響應時間落到中位數的情況,而這種現象被稱為長尾問題。 為了區分是平均的慢還是長尾的慢,最簡單的方式就是按照請求延遲的范圍進行分組。例如,統計延遲在 0~10ms 之間的請求數有多少,而 10~20ms 之間的請求數又有多少。通過這種方式可以快速分析系統慢的原因。Histogram 和 Summary 都是為了能夠解決這樣問題的存在,通過 Histogram 和 Summary 類型的監控指標,我們可以快速了解監控樣本的分布情況。
Histogram 類型的樣本會提供三種指標(假設指標名稱為 <basename>):
樣本的值分布在 bucket 中的數量,命名為 <basename>_bucket{le="<上邊界>"}。解釋的更通俗易懂一點,這個值表示指標值小於等於上邊界的所有樣本數量。
1、在總共2次請求當中。http 請求響應時間 <=0.005 秒 的請求次數為0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0 2、在總共2次請求當中。http 請求響應時間 <=0.01 秒 的請求次數為0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0 3、在總共2次請求當中。http 請求響應時間 <=0.025 秒 的請求次數為0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.05",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.075",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.1",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.25",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.5",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.75",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="1.0",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="2.5",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="5.0",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="7.5",} 2.0 4、在總共2次請求當中。http 請求響應時間 <=10 秒 的請求次數為 2 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="10.0",} 2.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="+Inf",} 2.0
所有樣本值的大小總和,命名為 <basename>_sum。
實際含義: 發生的2次 http 請求總的響應時間為 13.107670803000001 秒
io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001
樣本總數,命名為 <basename>_count。值和 <basename>_bucket{le="+Inf"} 相同。
實際含義: 當前一共發生了 2 次 http 請求
io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0
注意: bucket 可以理解為是對數據指標值域的一個划分,划分的依據應該基於數據值的分布。注意后面的采樣點是包含前面的采樣點的,假設 xxx_bucket{...,le="0.01"} 的值為 10,而 xxx_bucket{...,le="0.05"} 的值為 30,那么意味着這 30 個采樣點中,有 10 個是小於 0.01s的,其余 20 個采樣點的響應時間是介於0.01s 和 0.05s之間的。 可以通過 histogram_quantile() 函數來計算 Histogram 類型樣本的分位數。分位數可能不太好理解,你可以理解為分割數據的點。我舉個例子,假設樣本的 9 分位數(quantile=0.9)的值為 x,即表示小於 x 的采樣值的數量占總體采樣值的 90%。Histogram 還可以用來計算應用性能指標值(Apdex score)。
summary
與 Histogram 類型類似,用於表示一段時間內的數據采樣結果(通常是請求持續時間或響應大小等),但它直接存儲了分位數(通過客戶端計算,然后展示出來),而不是通過區間來計算。它也有三種作用:
- 1、對於每個采樣點進行統計,並形成分位圖。(如:正態分布一樣,統計低於60分不及格的同學比例,統計低於80分的同學比例,統計低於95分的同學比例)
- 2、統計班上所有同學的總成績(sum)
- 3、統計班上同學的考試總人數(count)
帶有度量指標的[basename]的summary 在抓取時間序列數據有如命名。
1、觀察時間的φ-quantiles (0 ≤ φ ≤ 1), 顯示為[basename]{分位數="[φ]"} 2、[basename]_sum, 是指所有觀察值的總和 3、[basename]_count, 是指已觀察到的事件計數值
樣本值的分位數分布情況,命名為 <basename>{quantile="
<φ>"}
。
1、含義:這 12 次 http 請求中有 50% 的請求響應時間是 3.052404983s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983
2、含義:這 12 次 http 請求中有 90% 的請求響應時間是 8.003261666s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666
所有樣本值的大小總和,命名為 <basename>_sum
。
1、含義:這12次 http 請求的總響應時間為 51.029495508s io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508
樣本總數,命名為 <basename>_count
。
1、含義:當前一共發生了 12 次 http 請求 io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0
現在可以總結一下 Histogram 與 Summary 的異同:
它們都包含了 <basename>_sum 和 <basename>_count 指標
Histogram 需要通過 <basename>_bucket 來計算分位數,而 Summary 則直接存儲了分位數的值。
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463 prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005 prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173 prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002 prometheus_tsdb_wal_fsync_duration_seconds_count 216
從上面的樣本中可以得知當前Promtheus Server進行wal_fsync操作的總次數為216次,耗時2.888716127000002s。其中中位數(quantile=0.5)的耗時為0.012352463,9分位數(quantile=0.9)的耗時為0.014458005s。
Prometheus PromQL語法
PromQL(Prometheus Query Language)是 Prometheus 自己開發的表達式語言,語言表現力很豐富,內置函數也很多。使用它可以對時序數據進行篩選和聚合。
數據類型
PromQL 表達式計算出來的值有以下幾種類型:
- 瞬時向量 (Instant vector): 一組時序,每個時序只有一個采樣值
- 區間向量 (Range vector): 一組時序,每個時序包含一段時間內的多個采樣值
- 標量數據 (Scalar): 一個浮點數
- 字符串 (String): 一個字符串,暫時未用
瞬時向量選擇器
瞬時向量選擇器用來選擇一組時序在某個采樣點的采樣值。
最簡單的情況就是指定一個度量指標,選擇出所有屬於該度量指標的時序的當前采樣值。比如下面的表達式:
apiserver_request_total
可以通過在后面添加用大括號包圍起來的一組標簽鍵值對來對時序進行過濾。比如下面的表達式篩選出了 job 為 kubernetes-apiservers,並且 resource為 pod的時序:
apiserver_request_total{job="kubernetes-apiserver",resource="pods"}
匹配標簽值時可以是等於,也可以使用正則表達式。總共有下面幾種匹配操作符:
- =:完全相等
- !=: 不相等
- =~: 正則表達式匹配
- !~: 正則表達式不匹配
下面的表達式篩選出了container是kube-scheduler或kube-proxy或kube-apiserver的時序數據
container_processes{container=~"kube-scheduler|kube-proxy|kube-apiserver"}
區間向量選擇器
區間向量選擇器類似於瞬時向量選擇器,不同的是它選擇的是過去一段時間的采樣值。可以通過在瞬時向量選擇器后面添加包含在 [] 里的時長來得到區間向量選擇器。比如下面的表達式選出了所有度量指標為apiserver_request_total且resource是pod的時序在過去1 分鍾的采樣值。
apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]
這個不支持Graph,需要選擇Console,才會看到采集的數據
說明:時長的單位可以是下面幾種之一:
- s:seconds
- m:minutes
- h:hours
- d:days
- w:weeks
- y:years
偏移向量選擇器
前面介紹的選擇器默認都是以當前時間為基准時間,偏移修飾器用來調整基准時間,使其往前偏移一段時間。偏移修飾器緊跟在選擇器后面,使用 offset 來指定要偏移的量。比如下面的表達式選擇度量名稱為apiserver_request_total的所有時序在 5 分鍾前的采樣值。
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} offset 5m
下面的表達式選擇apiserver_request_total 度量指標在 1 周前的這個時間點過去 5 分鍾的采樣值。
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w
聚合操作符
PromQL 的聚合操作符用來將向量里的元素聚合得更少。總共有下面這些聚合操作符:
- sum:求和
- min:最小值
- max:最大值
- avg:平均值
- stddev:標准差
- stdvar:方差
- count:元素個數
- count_values:等於某值的元素個數
- bottomk:最小的 k 個元素
- topk:最大的 k 個元素
- quantile:分位數
- rate: 增長率
如:
計算xianchaomaster1節點所有容器總計內存
sum(container_memory_usage_bytes{instance=~"xianchaomaster1"})/1024/1024/1024
計算xianchaomaster1節點最近1m所有容器cpu使用率
sum (rate (container_cpu_usage_seconds_total{instance=~"xianchaomaster1"}[1m])) / sum (machine_cpu_cores{ instance =~"xianchaomaster1"}) * 100
計算最近1m所有容器cpu使用率
sum (rate (container_cpu_usage_seconds_total{id!="/"}[1m])) by (id)
#把id會打印出來
結果如下:
內置函數
- Prometheus 內置了一些函數來輔助計算,下面介紹一些典型的。
- abs():絕對值
- sqrt():平方根
- exp():指數計算
- ln():自然對數
- ceil():向上取整
- floor():向下取整
- round():四舍五入取整
- delta():計算區間向量里每一個時序第一個和最后一個的差值
- sort():排序
函數列表
一些函數有默認的參數,例如:year(v=vector(time()) instant-vector)
。v是參數值,instant-vector是參數類型。vector(time())是默認值。
abs()
abs(v instant-vector)
返回輸入向量的所有樣本的絕對值。
absent()
absent(v instant-vector)
,如果賦值給它的向量具有樣本數據,則返回空向量;如果傳遞的瞬時向量參數沒有樣本數據,則返回不帶度量指標名稱且帶有標簽的樣本值為1的結果
當監控度量指標時,如果獲取到的樣本數據是空的, 使用absent方法對告警是非常有用的
absent(nonexistent{job="myjob"}) # => key: value = {job="myjob"}: 1
absent(nonexistent{job="myjob", instance=~".*"}) # => {job="myjob"} 1 so smart !
absent(sum(nonexistent{job="myjob"})) # => key:value {}: 0
ceil()
ceil(v instant-vector)
是一個向上舍入為最接近的整數。
changes()
changes(v range-vector)
輸入一個范圍向量, 返回這個范圍向量內每個樣本數據值變化的次數。
clamp_max()
clamp_max(v instant-vector, max scalar)
函數,輸入一個瞬時向量和最大值,樣本數據值若大於max,則改為max,否則不變
clamp_min()
clamp_min(v instant-vector)
函數,輸入一個瞬時向量和最大值,樣本數據值小於min,則改為min。否則不變
count_saclar()
count_scalar(v instant-vector)
函數, 輸入一個瞬時向量,返回key:value="scalar": 樣本個數。而count()
函數,輸入一個瞬時向量,返回key:value=向量:樣本個數,其中結果中的向量允許通過by
條件分組。
day_of_month()
day_of_month(v=vector(time()) instant-vector)
函數,返回被給定UTC時間所在月的第幾天。返回值范圍:1~31。
day_of_week()
day_of_week(v=vector(time()) instant-vector)
函數,返回被給定UTC時間所在周的第幾天。返回值范圍:0~6. 0表示星期天。
days_in_month()
days_in_month(v=vector(time()) instant-vector)
函數,返回當月一共有多少天。返回值范圍:28~31.
delta()
delta(v range-vector)
函數,計算一個范圍向量v的第一個元素和最后一個元素之間的差值。返回值:key:value=度量指標:差值
下面這個表達式例子,返回過去兩小時的CPU溫度差:
delta(cpu_temp_celsius{host="zeus"}[2h])
delta
函數返回值類型只能是gauges。
deriv()
deriv(v range-vector)
函數,計算一個范圍向量v中各個時間序列二階導數,使用簡單線性回歸
deriv
二階導數返回值類型只能是gauges。
drop_common_labels()
drop_common_labels(instant-vector)
函數,輸入一個瞬時向量,返回值是key:value=度量指標:樣本值,其中度量指標是去掉了具有相同標簽。 例如:http_requests_total{code="200", host="127.0.0.1:9090", method="get"} : 4, http_requests_total{code="200", host="127.0.0.1:9090", method="post"} : 5, 返回值: http_requests_total{method="get"} : 4, http_requests_total{code="200", method="post"} : 5
exp()
exp(v instant-vector)
函數,輸入一個瞬時向量, 返回各個樣本值的e指數值,即為e^N次方。特殊情況如下所示:
Exp(+inf) = +Inf Exp(NaN) = NaN
floor()
floor(v instant-vector)
函數,與ceil()
函數相反。 4.3 為 4 。
histogram_quantile()
histogram_quatile(φ float, b instant-vector)
函數計算b向量的φ-直方圖 (0 ≤ φ ≤ 1) 。參考中文文獻[https://www.howtoing.com/how-to-query-prometheus-on-ubuntu-14-04-part-2/]
holt_winters()
holt_winters(v range-vector, sf scalar, tf scalar)
函數基於范圍向量v,生成事件序列數據平滑值。平滑因子sf
越低, 對老數據越重要。趨勢因子tf
越高,越多的數據趨勢應該被重視。0< sf, tf <=1。 holt_winters
僅用於gauges
hour()
hour(v=vector(time()) instant-vector)
函數返回被給定UTC時間的當前第幾個小時,時間范圍:0~23。
idelta()
idelta(v range-vector)
函數,輸入一個范圍向量,返回key: value = 度量指標: 每最后兩個樣本值差值。
increase()
increase(v range-vector)
函數, 輸入一個范圍向量,返回:key:value = 度量指標:last值-first值,自動調整單調性,如:服務實例重啟,則計數器重置。與delta()
不同之處在於delta是求差值,而increase返回最后一個減第一個值,可為正為負。
下面的表達式例子,返回過去5分鍾,連續兩個時間序列數據樣本值的http請求增加值。
increase(http_requests_total{job="api-server"}[5m])
increase
的返回值類型只能是counters,主要作用是增加圖表和數據的可讀性,使用rate
記錄規則的使用率,以便持續跟蹤數據樣本值的變化。
irate
irate(v range-vector)
函數, 輸入:范圍向量,輸出:key: value = 度量指標: (last值-last前一個值)/時間戳差值。它是基於最后兩個數據點,自動調整單調性, 如:服務實例重啟,則計數器重置。
下面表達式針對范圍向量中的每個時間序列數據,返回兩個最新數據點過去5分鍾的HTTP請求速率。
irate(http_requests_total{job="api-server"}[5m])
irate
只能用於繪制快速移動的計數器。因為速率的簡單更改可以重置FOR子句,利用警報和緩慢移動的計數器,完全由罕見的尖峰組成的圖形很難閱讀。
label_replace()
對於v中的每個時間序列,label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)
將正則表達式與標簽值src_label匹配。如果匹配,則返回時間序列,標簽值dst_label被替換的擴展替換。$1替換為第一個匹配子組,$2替換為第二個等。如果正則表達式不匹配,則時間序列不會更改。
另一種更容易的理解是:label_replace
函數,輸入:瞬時向量,輸出:key: value = 度量指標: 值(要替換的內容:首先,針對src_label標簽,對該標簽值進行regex正則表達式匹配。如果不能匹配的度量指標,則不發生任何改變;否則,如果匹配,則把dst_label標簽的標簽紙替換為replacement 下面這個例子返回一個向量值a帶有foo
標簽:label_replace(up{job="api-server", serice="a:c"}, "foo", "$1", "service", "(.*):.*")
ln()
ln(v instance-vector)
計算瞬時向量v中所有樣本數據的自然對數。特殊例子:
ln(+Inf) = +Inf ln(0) = -Inf ln(x<0) = NaN ln(NaN) = NaN
log2()
log2(v instant-vector)
函數計算瞬時向量v中所有樣本數據的二進制對數。
log10()
log10(v instant-vector)
函數計算瞬時向量v中所有樣本數據的10進制對數。相當於ln()
minute()
minute(v=vector(time()) instant-vector)
函數返回給定UTC時間當前小時的第多少分鍾。結果范圍:0~59。
month()
month(v=vector(time()) instant-vector)
函數返回給定UTC時間當前屬於第幾個月,結果范圍:0~12。
predict_linear()
predict_linear(v range-vector, t scalar)
預測函數,輸入:范圍向量和從現在起t秒后,輸出:不帶有度量指標,只有標簽列表的結果值。
例如:predict_linear(http_requests_total{code="200",instance="120.77.65.193:9090",job="prometheus",method="get"}[5m], 5) 結果: {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"} 1 {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"} 4283.449995397104 {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"} 22.99999999999999 {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 130.90381188596754 {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"} 2 {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 2
rate()
rate(v range-vector)
函數, 輸入:范圍向量,輸出:key: value = 不帶有度量指標,且只有標簽列表:(last值-first值)/時間差s
rate(http_requests_total[5m]) 結果: {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"} 0.2 {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0.003389830508474576 {code="422",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="400",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0
rate()
函數返回值類型只能用counters, 當用圖表顯示增長緩慢的樣本數據時,這個函數是非常合適的。
注意:當rate函數和聚合方式聯合使用時,一般先使用rate函數,再使用聚合操作, 否則,當服務實例重啟后,rate無法檢測到counter重置。
resets()
resets()
函數, 輸入:一個范圍向量,輸出:key-value=沒有度量指標,且有標簽列表[在這個范圍向量中每個度量指標被重置的次數]。在兩個連續樣本數據值下降,也可以理解為counter被重置。 示例:
resets(http_requests_total[5m]) 結果: {code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="422",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="static",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="200",handler="graph",instance="120.77.65.193:9090",job="prometheus",method="get"} 0 {code="400",handler="query",instance="120.77.65.193:9090",job="prometheus",method="get"} 0
resets只能和counters一起使用。
round()
round(v instant-vector, to_nearest 1= scalar)
函數,與ceil
和floor
函數類似,輸入:瞬時向量,輸出:指定整數級的四舍五入值, 如果不指定,則是1以內的四舍五入。
scalar()
scalar(v instant-vector)
函數, 輸入:瞬時向量,輸出:key: value = "scalar", 樣本值[如果度量指標樣本數量大於1或者等於0, 則樣本值為NaN, 否則,樣本值本身]
sort()
sort(v instant-vector)
函數,輸入:瞬時向量,輸出:key: value = 度量指標:樣本值[升序排列]
sort_desc()
sort(v instant-vector
函數,輸入:瞬時向量,輸出:key: value = 度量指標:樣本值[降序排列]
sqrt()
sqrt(v instant-vector)
函數,輸入:瞬時向量,輸出:key: value = 度量指標: 樣本值的平方根
time()
time()
函數,返回從1970-01-01到現在的秒數,注意:它不是直接返回當前時間,而是時間戳
vector()
vector(s scalar)
函數,返回:key: value= {}, 傳入參數值
year()
year(v=vector(time()) instant-vector)
, 返回年份。
_over_time()
下面的函數列表允許傳入一個范圍向量,返回一個帶有聚合的瞬時向量:
avg_over_time(range-vector)
: 范圍向量內每個度量指標的平均值。min_over_time(range-vector)
: 范圍向量內每個度量指標的最小值。max_over_time(range-vector)
: 范圍向量內每個度量指標的最大值。sum_over_time(range-vector)
: 范圍向量內每個度量指標的求和值。count_over_time(range-vector)
: 范圍向量內每個度量指標的樣本數據個數。quantile_over_time(scalar, range-vector)
: 范圍向量內每個度量指標的樣本數據值分位數,φ-quantile (0 ≤ φ ≤ 1)stddev_over_time(range-vector)
: 范圍向量內每個度量指標的總體標准偏差。- `stdvar_over_time(range-vector): 范圍向量內每個度量指標的總體標准方差。