選擇時間序列¶
原文: 选择时间序列
本節我們將學習如何用不同的方式來選擇數據,如何在單個時間戳或一段時間範圍內基於標籤過濾數據,以及如何使用移動時間的方式來選擇數據。
過濾指標名稱¶
最簡單的 PromQL 查詢就是直接選擇具有指定指標名稱的序列,例如,以下查詢將返回所有具有指標名稱 demo_api_request_duration_seconds_count 的序列:
該查詢將返回許多具有相同指標名稱的序列,但有不同的標籤組合 instance、job、method、path 和 status 等。輸出結果如下所示:
根據標籤過濾¶
如果我們只查詢 demo_api_request_duration_seconds_count 中具有 method="GET" 標籤的那些指標序列,則可以在指標名稱後用大括號加上這個過濾條件:
此外我們還可以使用逗號來組合多個標籤匹配器:
上面將得到 demo 任務下面 demo-service-0:10000 這個實例且 method="GET" 的指標序列數據:
需要注意的是組合使用多個匹配條件的時候,是過濾所有條件都滿足的時間序列。
除了相等匹配之外,Prometheus 還支持其他幾種匹配器類型:
!=不等於=~正則表達式匹配!~正則表達式不匹配
甚至我們還可以完全省略指標名稱,比如直接查詢所有 path 標籤以 /api 開頭的所有序列:
該查詢會得到一些具有不同指標名稱的序列:
Tip
注意: Prometheus 中的正則表達式總是針對完整的字符串而不是部分字符串匹配。因此,在匹配任何以 /api 開通的路徑時,不需要以 ^ 開頭,但需要在結尾處添加 .*,這樣可以匹配 path="/api" 這樣的序列。
前面我們說過在 Prometheus 內部,指標名稱本質上是一個名為 __name__ 的特性標籤,所以查詢 demo_api_request_duration_seconds_count 實際上和下面的查詢方式是等效的:
按上面的方法編寫的選擇器,可以得到一個 瞬時向量,其中包含所有選定序列的單個最新值。事實上有些函數要求你不是傳遞一個單一的值,而是傳遞一個序列在一段時間範圍內的值,也就是前面我們說的 區間向量。這個時候我們可以通過附加一個[<數字><單位>]形式的持續時間指定符,將"瞬時向量選擇器"改變為"區間向量選擇器"(例如[5m]表示 5 分鐘)。
比如要查詢最近 5 分鐘的可用內存,可以執行下面的查詢語句:
將得到如下所示的查詢結果:
可以使用的有效的時間單位為:
ms-毫秒s-秒m- 分鐘h- 小時d- 天y- 年
有時我們還需要以 時移 (offset) 的方式來訪問過去的數據,通常是用來與當前數據進行比較。要將過去的數據時移到當前位置,可以使用 offset my_metric offset 5m 或 my_metric[1m] offset 7d)。
例如,要選擇一個小時前的可用內存,可以使用下面的查詢語句:
這個時候查詢的值則是一個小時之前的數據:
練習
1.構建一個查詢,選擇所有時間序列。
或者:
2.構建一個查詢,查詢所有指標名稱為 demo_api_request_duration_seconds_count 並且 method 標籤不為 POST 的序列。
3.使用 demo_memory_usage_bytes 指標查詢一小時前的 1 分鐘時間範圍的的可用空閒內存。




