0x00 簡單的時間序列選擇
返回度量指標 http_requests_total
的所有時間序列樣本數據:
http_requests_total
返回度量指標名稱為 http_requests_total
,標簽分別是 job="apiserver"
, handler="/api/comments"
的所有時間序列樣本數據:
http_requests_total{job="apiserver", handler="/api/comments"}
返回度量指標名稱為 http_requests_total
,標簽分別是 job="apiserver"
, handler="/api/comments"
,且是 5 分鍾內的所有時間序列樣本數據:
http_requests_total{job="apiserver", handler="/api/comments"}[5m]
[info] 注意
一個區間向量表達式不能直接展示在
Graph
圖表中,但是可以展示在Console
視圖中。
使用正則表達式,你可以通過特定模式匹配標簽為 job
的特定任務名,獲取這些任務的時間序列。在下面這個例子中, 所有任務名稱以 server
結尾。
http_requests_total{job=~".*server"}
Prometheus中的所有正則表達式都使用 RE2 語法
返回度量指標名稱是 http_requests_total
, 且 http 返回碼不以 4
開頭的所有時間序列數據:
http_requests_total{status!~"4.."}
0x01 使用函數,操作符等
返回度量指標 http_requests_total
過去 5 分鍾內的 http 請求數的平均增長速率:
rate(http_requests_total[5m])
返回度量指標 http_requests_total
過去 5 分鍾內的 http 請求數的平均增長速率總和,維度是 job
:
sum(rate(http_requests_total[5m])) by (job)
{job="apiserver"} 0.16666666666666666 {job="kubelet"} 0.49999876544124355
如果兩個指標具有相同維度的標簽,我們可以使用二元操作符計算樣本數據,返回值:key: value=標簽列表:計算樣本值。例如,以下表達式返回每一個實例的空閑內存,單位是 MiB。
(instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024 / 1024
如果想知道每個應用的剩余內存,可以使用如下表達式:
sum( instance_memory_limit_bytes - instance_memory_usage_bytes ) by (app, proc) / 1024 / 1024
如果相同的集群調度群顯示如下的每個實例的 CPU 使用率:
instance_cpu_time_ns{app="lion", proc="web", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"} ...
我們可以按照應用和進程類型來獲取 CPU 利用率最高的 3 個樣本數據:
topk(3, sum(rate(instance_cpu_time_ns[5m])) by (app, proc))
假設一個服務實例只有一個時間序列數據,那么我們可以通過下面表達式統計出每個應用的實例數量:
count(instance_cpu_time_ns) by (app)