理解指標型別
Prometheus 支援四種指標型別
- 計數器
- 計量器
- 直方圖
- 摘要
Counter(計數器)
計數器是一種只能增加或重置的指標值,即其值不能小於前一個值。它可用於記錄請求數、錯誤數等指標。
在查詢欄中輸入以下查詢並點選執行。
go_gc_duration_seconds_count
PromQL 中的 rate() 函式獲取一段時間內的指標歷史記錄,並計算值每秒增加的速度。rate() 函式僅適用於計數器值。
rate(go_gc_duration_seconds_count[5m]) 
Gauge(儀表盤)
計量器是一個可以上升或下降的數值。它可用於記錄叢集中的 Pod 數量、佇列中的事件數量等指標。
PromQL 函式,如 max_over_time、min_over_time 和 avg_over_time,可用於計量器指標。
Histogram(直方圖)
直方圖是一種比前兩種更復雜的指標型別。直方圖可用於基於桶值計數的任何計算值。桶邊界可以由開發人員配置。一個常見的例子是響應請求所需的時間,稱為延遲。
示例:假設我們要觀察處理 API 請求所需的時間。直方圖允許我們將請求時間儲存在桶中,而不是為每個請求儲存請求時間。我們為所需時間定義桶,例如 小於或等於 0.3、小於或等於 0.5、小於或等於 0.7、小於或等於 1 和 小於或等於 1.2。這些就是我們的桶,一旦計算出請求所需的時間,它就會被新增到所有桶的計數中,這些桶的邊界高於測量值。
假設對端點“/ping”的請求 1 耗時 0.25 秒。桶的計數將是:
/ping
| 桶 | 計數 |
|---|---|
| 0 - 0.3 | 1 |
| 0 - 0.5 | 1 |
| 0 - 0.7 | 1 |
| 0 - 1 | 1 |
| 0 - 1.2 | 1 |
| 0 - +Inf | 1 |
注意:+Inf 桶預設新增。
(由於直方圖是累積頻率,1 將新增到所有大於該值的桶中)
對端點“/ping”的請求 2 耗時 0.4 秒。桶的計數將是這樣。
/ping
| 桶 | 計數 |
|---|---|
| 0 - 0.3 | 1 |
| 0 - 0.5 | 2 |
| 0 - 0.7 | 2 |
| 0 - 1 | 2 |
| 0 - 1.2 | 2 |
| 0 - +Inf | 2 |
由於 0.4 小於 0.5,所有達到該邊界的桶都會增加其計數。
讓我們從 Prometheus UI 探索一個直方圖指標並應用一些函式。
prometheus_http_request_duration_seconds_bucket{handler="/graph"}
histogram_quantile() 函式可用於從直方圖計算分位數
histogram_quantile(0.9,prometheus_http_request_duration_seconds_bucket{handler="/graph"})
圖表顯示第 90 百分位是 0.09。要查詢過去 5 分鐘的 histogram_quantile,您可以使用 rate() 和時間範圍
histogram_quantile(0.9, rate(prometheus_http_request_duration_seconds_bucket{handler="/graph"}[5m]))
總結
摘要也測量事件,是直方圖的替代方案。它們成本更低但丟失更多資料。它們在應用層面計算,因此無法聚合來自同一程序多個例項的指標。當指標的桶事先未知時,可以使用它們,但強烈建議儘可能使用直方圖而不是摘要。
在本教程中,我們詳細介紹了指標型別以及一些 PromQL 操作,如 rate、histogram_quantile 等。




