Prometheus 中提供了四種指標類型(參考:Prometheus 的指標類型),其中直方圖(Histogram)和摘要(Summary)是最復雜和難以理解的,這篇文章就是為了幫助大家加深對這 histogram
類型指標的理解。
根據上篇文檔,Histogram 會在一段時間范圍內對數據進行采樣(通常是請求持續時間或響應大小等),并將其計入可配置的存儲桶(bucket)中。但這句話還是不太好理解,下面通過具體的示例來說明。
假設我們想監控某個應用在一段時間內的響應時間,最后監控到的樣本的響應時間范圍為 0s~10s?,F在我們將樣本的值域劃分為不同的區間,即不同的 bucket
,每個 bucket 的寬度是 0.2s。那么第一個 bucket 表示響應時間小于等于 0.2s 的請求數量,第二個 bucket 表示響應時間大于 0.2s 小于等于 0.4s 的請求數量,以此類推。
Prometheus 的 histogram 是一種累積直方圖,與上面的區間劃分方式是有差別的,它的劃分方式如下:還假設每個 bucket 的寬度是 0.2s,那么第一個 bucket 表示響應時間小于等于 0.2s 的請求數量,第二個 bucket 表示響應時間小于等于 0.4s 的請求數量,以此類推。也就是說,每一個 bucket 的樣本包含了之前所有 bucket 的樣本,所以叫累積直方圖。
上節內容告訴我們,Prometheus 中的 histogram 是累積的,這是很奇怪的,因為通常情況下非累積的直方圖更容易理解。Prometheus 為什么要這么做呢?
想象一下,如果 histogram 類型的指標中加入了額外的標簽,或者劃分了更多的 bucket,那么樣本數據的分析就會變得越來越復雜。如果 histogram 是累積的,在抓取指標時就可以根據需要丟棄某些 bucket,這樣可以在降低 Prometheus 維護成本的同時,還可以粗略計算樣本值的分位數。通過這種方法,用戶不需要修改應用代碼,便可以動態減少抓取到的樣本數量。
假設某個 histogram 類型指標的樣本數據如下:
現在我們希望 Prometheus 在抓取指標時丟棄響應時間在 100ms
以下的 bucket,就可以通過下面的 relabel 配置來實現:
其中,example_latency_seconds_bucket
用來匹配標簽 __name__
的值,'0.0.*' 用來匹配標簽 le
的值,即 le
的值為 0.0x
。然后將匹配到的樣本丟棄。
通過這種方法,你可以丟棄任意的 bucket,但不能丟棄 le="+Inf"
的 bucket,因為 histogram_quantile
函數需要使用這個標簽。
另外 histogram 還提供了 _sum
指標和 _count
指標,即使你丟棄了所有的 bucket,仍然可以通過這兩個指標值來計算請求的平均響應時間。
通過累積直方圖的方式,還可以很輕松地計算某個 bucket 的樣本數占所有樣本數的比例。例如,想知道響應時間小于等于 1s 的請求占所有請求的比例,可以通過以下公式來計算:
example_latency_seconds_bucket{le="1.0"}/ignoring(le)example_latency_seconds_bucket{le="+Inf"}
Prometheus 通過 histogram_quantile
函數來計算分位數(quantile),而且是一個預估值,并不完全準確,因為這個函數是假定每個區間內的樣本分布是線性分布來計算結果值的。預估的準確度取決于 bucket 區間劃分的粒度,粒度越大,準確度越低。以下圖為例:
假設有 10000
個樣本,第 9501
個樣本落入了第 8 個 bucket。第 8 個 bucket 總共有 368
個樣本,其中第 9501
個樣本在該 bucket 中屬于第 93
個樣本。
根據 Prometheus 源代碼文件 promql/quantile.go 第 108 行的公式:
returnbucketStart+(bucketEnd-bucketStart)*float64(rank/count)
我們可以計算(quantile=0.95)的樣本值為:
這個值已經很接近精確的分位數值了。關于 histogram_quantile 函數的詳細使用方式,請參考:PromQL 內置函數。
到此,關于“ histogram的工作原理以及分位數的計算方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
鐘南山:99%的感染者可以在7到10天內完全康復。蔡敏貞攝眾信。中新網廣州12月9日電(記者蔡敏杰)中國工程院院士鐘南山9日在線表示,奧米克隆菌株(BA.4/5,BF7)感染并不可怕,99%的感染者在7至10天內可以完全康復。預防感染還是要落實的,但是過度的“預防”會對經濟或社會造成更大的二次傷害,接下來的防控要以重疾防控為主。當日,鐘南山在中華醫學會第23屆全國呼吸病學學術會議——2022上做了...
擴張性的財政政策是指在市場經濟經濟衰退的時候,國家通過發行國債或增加財政支出、減少稅收的方式來使社會中的總需求量上升,從而對供需平衡產生一定的影響。 這種做法往往會使市場內的失業率在短時間內下跌,使經濟得以迅速復蘇。財政政策的三大手段分別是什么?財政政策的三大手段指國家為實現一定財政政策目標而采取的一系列財政手段和財政措施。財政政策的三大手段分別是:財政收入、財政支出、國債。財政收入主要由稅收構成...
開通花唄有風險嗎?開通花唄是沒有風險的,其本質是個人小額貸款服務,主要依托于各種消費場景。用戶在開通花唄時,假如頁面跳轉到了人臉識別,則需要用戶完成人臉識別后才可以開通花唄。開通花唄是好還是不好?有利的方面:與很多信貸產品相比較,花唄支持的場景幾乎是最全面的,不僅包括支付寶本身的購物商城,小到日常生活中比如買早餐等都是可以進行支付的,很多平臺的產品基本上都不能做到;其次花唄使用是沒有費用的,除了用...