這篇文章主要介紹“ histogram的工作原理以及分位數(shù)的計(jì)算方法”,在日常操作中,相信很多人在 histogram的工作原理以及分位數(shù)的計(jì)算方法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答” histogram的工作原理以及分位數(shù)的計(jì)算方法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、廣河網(wǎng)站維護(hù)、網(wǎng)站推廣。
Prometheus 中提供了四種指標(biāo)類型(參考:Prometheus 的指標(biāo)類型),其中直方圖(Histogram)和摘要(Summary)是最復(fù)雜和難以理解的,這篇文章就是為了幫助大家加深對(duì)這 histogram
類型指標(biāo)的理解。
根據(jù)上篇文檔,Histogram 會(huì)在一段時(shí)間范圍內(nèi)對(duì)數(shù)據(jù)進(jìn)行采樣(通常是請(qǐng)求持續(xù)時(shí)間或響應(yīng)大小等),并將其計(jì)入可配置的存儲(chǔ)桶(bucket)中。但這句話還是不太好理解,下面通過(guò)具體的示例來(lái)說(shuō)明。
假設(shè)我們想監(jiān)控某個(gè)應(yīng)用在一段時(shí)間內(nèi)的響應(yīng)時(shí)間,最后監(jiān)控到的樣本的響應(yīng)時(shí)間范圍為 0s~10s。現(xiàn)在我們將樣本的值域劃分為不同的區(qū)間,即不同的 bucket
,每個(gè) bucket 的寬度是 0.2s。那么第一個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.2s 的請(qǐng)求數(shù)量,第二個(gè) bucket 表示響應(yīng)時(shí)間大于 0.2s 小于等于 0.4s 的請(qǐng)求數(shù)量,以此類推。
Prometheus 的 histogram 是一種累積直方圖,與上面的區(qū)間劃分方式是有差別的,它的劃分方式如下:還假設(shè)每個(gè) bucket 的寬度是 0.2s,那么第一個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.2s 的請(qǐng)求數(shù)量,第二個(gè) bucket 表示響應(yīng)時(shí)間小于等于 0.4s 的請(qǐng)求數(shù)量,以此類推。也就是說(shuō),每一個(gè) bucket 的樣本包含了之前所有 bucket 的樣本,所以叫累積直方圖。
上節(jié)內(nèi)容告訴我們,Prometheus 中的 histogram 是累積的,這是很奇怪的,因?yàn)橥ǔG闆r下非累積的直方圖更容易理解。Prometheus 為什么要這么做呢?
想象一下,如果 histogram 類型的指標(biāo)中加入了額外的標(biāo)簽,或者劃分了更多的 bucket,那么樣本數(shù)據(jù)的分析就會(huì)變得越來(lái)越復(fù)雜。如果 histogram 是累積的,在抓取指標(biāo)時(shí)就可以根據(jù)需要丟棄某些 bucket,這樣可以在降低 Prometheus 維護(hù)成本的同時(shí),還可以粗略計(jì)算樣本值的分位數(shù)。通過(guò)這種方法,用戶不需要修改應(yīng)用代碼,便可以動(dòng)態(tài)減少抓取到的樣本數(shù)量。
假設(shè)某個(gè) histogram 類型指標(biāo)的樣本數(shù)據(jù)如下:
現(xiàn)在我們希望 Prometheus 在抓取指標(biāo)時(shí)丟棄響應(yīng)時(shí)間在 100ms
以下的 bucket,就可以通過(guò)下面的 relabel 配置來(lái)實(shí)現(xiàn):
其中,example_latency_seconds_bucket
用來(lái)匹配標(biāo)簽 __name__
的值,'0.0.*' 用來(lái)匹配標(biāo)簽 le
的值,即 le
的值為 0.0x
。然后將匹配到的樣本丟棄。
通過(guò)這種方法,你可以丟棄任意的 bucket,但不能丟棄 le="+Inf"
的 bucket,因?yàn)?histogram_quantile
函數(shù)需要使用這個(gè)標(biāo)簽。
另外 histogram 還提供了 _sum
指標(biāo)和 _count
指標(biāo),即使你丟棄了所有的 bucket,仍然可以通過(guò)這兩個(gè)指標(biāo)值來(lái)計(jì)算請(qǐng)求的平均響應(yīng)時(shí)間。
通過(guò)累積直方圖的方式,還可以很輕松地計(jì)算某個(gè) bucket 的樣本數(shù)占所有樣本數(shù)的比例。例如,想知道響應(yīng)時(shí)間小于等于 1s 的請(qǐng)求占所有請(qǐng)求的比例,可以通過(guò)以下公式來(lái)計(jì)算:
example_latency_seconds_bucket{le="1.0"} / ignoring (le) example_latency_seconds_bucket{le="+Inf"}
Prometheus 通過(guò) histogram_quantile
函數(shù)來(lái)計(jì)算分位數(shù)(quantile),而且是一個(gè)預(yù)估值,并不完全準(zhǔn)確,因?yàn)檫@個(gè)函數(shù)是假定每個(gè)區(qū)間內(nèi)的樣本分布是線性分布來(lái)計(jì)算結(jié)果值的。預(yù)估的準(zhǔn)確度取決于 bucket 區(qū)間劃分的粒度,粒度越大,準(zhǔn)確度越低。以下圖為例:
假設(shè)有 10000
個(gè)樣本,第 9501
個(gè)樣本落入了第 8 個(gè) bucket。第 8 個(gè) bucket 總共有 368
個(gè)樣本,其中第 9501
個(gè)樣本在該 bucket 中屬于第 93
個(gè)樣本。
根據(jù) Prometheus 源代碼文件 promql/quantile.go 第 108 行的公式:
return bucketStart + (bucketEnd-bucketStart)*float64(rank/count)
我們可以計(jì)算(quantile=0.95)的樣本值為:
這個(gè)值已經(jīng)很接近精確的分位數(shù)值了。關(guān)于 histogram_quantile 函數(shù)的詳細(xì)使用方式,請(qǐng)參考:PromQL 內(nèi)置函數(shù)。
到此,關(guān)于“ histogram的工作原理以及分位數(shù)的計(jì)算方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
網(wǎng)頁(yè)標(biāo)題:histogram的工作原理以及分位數(shù)的計(jì)算方法
文章來(lái)源:http://muchs.cn/article2/ishjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、商城網(wǎng)站、小程序開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)