Prometheus 計數器指標
深入瞭解最重要的 Prometheus 指標
Prometheus 計數器指標需要一些時間來適應。官方文檔很好地解釋了這個理論,但直到我創建了一些圖表,我才明白這個指標有多麼強大。
本文將理論與圖表相結合,以更好地理解 Prometheus 的計數器指標。我們將看到 PromQL 的功能 rate, increase, irate, 和 resets工作,最重要的是,我們將查看一些由生產數據的計數器指標生成的圖表。
正如您可能從名稱中猜到的那樣,計數器可以計算事物。它以最簡單的方式這樣做,因爲它的值只能增加而不能減少 ¹。
如何理解
雖然無法減少正在運行的計數器的值,但可以重置計數器。應用程序重新啓動時會發生重置。
這種行爲使計數器適合跟蹤只能舉一些上升的事物。一些例子包括:
-
你喝的啤酒數量
-
您在汽車中行駛的總距離
或者在應用程序開發中:
-
HTTP 請求總量
-
日誌消息總量
-
job執行總量
永遠不要對可以上升或下降的數字使用計數器。例如,您不應該使用計數器來跟蹤數據庫的大小,因爲大小可以擴展或縮小。
使用計數器 (Working with counters)
在本節中,我們將瞭解計數器可以提供的獨特見解。我們將使用一個計算作業執行次數的示例指標。
class Job {
private val counter = Metrics.counter("job_execution")
@Scheduled(fixedDelay = 30000)
fun execute() {
counter.increment()
}
}
這段代碼通過名稱定義了一個計數器 job_execution.應用程序度量庫 Micrometer 將此度量導出爲 job_execution_total. 這 execute()方法每 30秒運行一次,每次運行時,它都會將我們的計數器加一。
原始計數器值 (Raw counter values)
在大多數情況下,您從原始計數器值中獲得的見解沒有價值。如果我們繪製原始計數器值,我們會看到一條不斷上升的線。
這條線會一直上升,直到我們重新啓動應用程序。當應用程序重新啓動時,計數器重置爲零
幸運的是,PromQL(Prometheus 查詢語言)提供了一些函數來從我們的計數器中獲取更有洞察力的數據。
速度 (rate)
prometheus rate函數計算計數器在定義的時間窗口內每秒增加的速率。以下 PromQL 表達式計算最後一分鐘的每秒作業執行率 ²。
rate(job_execution_total[1m])
我們的工作以固定間隔運行,因此將上述表達式繪製在圖形中會產生一條直線。
繪製一分鐘窗口內的作業執行率
從圖中,我們可以看到每秒大約執行 0.036 個job。將此數字乘以 60 得到 2.16。這比人們預期的要高,因爲我們的工作每 30 秒運行一次,這將是每分鐘兩次。
Prometheus 抓取指標的方式導致預期值和測量值之間存在細微差異。根據時間的不同,結果值可能更高或更低。重要的是要記住 Prometheus 指標不是一門精確的科學。
PromQL 的 rate自動調整計數器重置和其他問題。因此,無論何時應用程序重新啓動,我們都不會像處理原始計數器值那樣看到任何奇怪的下降。
單調性中斷(例如由於目標重新啓動引起的計數器重置)會自動調整。此外,計算會外推到時間範圍的末端,允許遺漏刮擦或刮擦週期與範圍時間段的不完美對齊。—
prometheus文檔
最後要注意的一件事 rate功能是我們應該只將它與計數器一起使用。使用意義不大 rate與任何其他 Prometheus指標類型。
增加 (increase)
promethues increase函數計算指定時間範圍內的計數器增加量 ²。以下 PromQL 表達式計算過去 5 分鐘內的job執行次數。
increase(job_execution_total[5m])
由於我們的job以30 秒的固定間隔運行,因此我們的圖表應顯示大約 10 的值
job執行次數
promethues推斷 increase覆蓋整個指定的時間窗口。因此,儘管計數器僅按整數增量 ¹ 增加,但仍有可能獲得非整數結果。
相似 rate,我們應該只使用 increase與計數器。使用意義不大 increase與任何其他Prometheus指標類型。
Irate
這個指標非常類似於 rate. 就像 rate, irate計算計數器在定義的時間窗口內每秒增加的速率。不同之處在於 irate只看最後兩個數據點。這使得 irate非常適合繪製易變和 / 或快速移動的計數器 ²。
以下 PromQL 表達式返回查找兩個最新數據點兩分鐘前的每秒job執行率。
irate(job_execution_total[2m])
我們應該只使用 Irate與計數器。
重置 (Resets)
promethues resets函數爲您提供指定時間窗口內的計數器重置次數 ²。以下 PromQL 表達式計算過去 5 分鐘內job執行計數器重置的次數。
resets(job_execution_total[5m])
我們應該只使用 resets與計數器。
真實世界的示例圖
到目前爲止,我們看到的圖表對於理解計數器的工作原理很有用,但它們很無聊。
爲了更深入地瞭解這些圖表在生產環境中的樣子,我從工作中的 Grafana儀表板中截取了幾張屏幕截圖。
由於不想泄露公司機密,我已對所有數據進行了匿名處理……
下圖使用 increase計算每分鐘處理的消息數。在 24小時的窗口上繪製此圖時,可以清楚地看到夜間的流量要低得多。
這裏我們有相同的指標,但這個指標使用 rate測量每秒處理的消息數。
rate 繪製我們每秒處理的消息數
正如人們所料,這兩個圖看起來相同,只是比例不同。您應該使用哪一種取決於您測量的對象和偏好。
在這個例子中,我更喜歡 rate變體。我認爲看到我們每秒處理6.5 條消息比看到我們每分鐘處理 390 條消息更容易理解。
結論
Prometheus 計數器是一個簡單的指標,但可以通過使用不同的 PromQL 函數來創建有價值的見解,這些函數旨在與計數器一起使用。你應該使用哪個 PromQL 函數取決於被測量的事物和你正在尋找的洞察力。
5.3 參考資料
參考 [1][2][3]
參考資料
[1]
參考: https://prometheus.io/docs/concepts/metric_types/
[2]
參考: https://levelup.gitconnected.com/prometheus-counter-metrics-d6c393d86076
[3]
參考: https://prometheus.io/docs/prometheus/latest/querying/functions/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/LG2NdybrEesksc7j78uVkw