91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

histogram的工作原理以及分位數的計算方法

發布時間:2021-09-07 07:45:38 來源:億速云 閱讀:2207 作者:chen 欄目:云計算

這篇文章主要介紹“ histogram的工作原理以及分位數的計算方法”,在日常操作中,相信很多人在 histogram的工作原理以及分位數的計算方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答” histogram的工作原理以及分位數的計算方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Prometheus 中提供了四種指標類型(參考:Prometheus 的指標類型),其中直方圖(Histogram)和摘要(Summary)是最復雜和難以理解的,這篇文章就是為了幫助大家加深對這 histogram 類型指標的理解。

1. 什么是 Histogram?

根據上篇文檔,Histogram 會在一段時間范圍內對數據進行采樣(通常是請求持續時間或響應大小等),并將其計入可配置的存儲桶(bucket)中。但這句話還是不太好理解,下面通過具體的示例來說明。

假設我們想監控某個應用在一段時間內的響應時間,最后監控到的樣本的響應時間范圍為 0s~10s。現在我們將樣本的值域劃分為不同的區間,即不同的 bucket,每個 bucket 的寬度是 0.2s。那么第一個 bucket 表示響應時間小于等于 0.2s 的請求數量,第二個 bucket 表示響應時間大于 0.2s 小于等于 0.4s 的請求數量,以此類推。

histogram的工作原理以及分位數的計算方法

Prometheus 的 histogram 是一種累積直方圖,與上面的區間劃分方式是有差別的,它的劃分方式如下:還假設每個 bucket 的寬度是 0.2s,那么第一個 bucket 表示響應時間小于等于 0.2s 的請求數量,第二個 bucket 表示響應時間小于等于 0.4s 的請求數量,以此類推。也就是說,每一個 bucket 的樣本包含了之前所有 bucket 的樣本,所以叫累積直方圖。

histogram的工作原理以及分位數的計算方法

2. 為什么是累積直方圖?

上節內容告訴我們,Prometheus 中的 histogram 是累積的,這是很奇怪的,因為通常情況下非累積的直方圖更容易理解。Prometheus 為什么要這么做呢?

想象一下,如果 histogram 類型的指標中加入了額外的標簽,或者劃分了更多的 bucket,那么樣本數據的分析就會變得越來越復雜。如果 histogram 是累積的,在抓取指標時就可以根據需要丟棄某些 bucket,這樣可以在降低 Prometheus 維護成本的同時,還可以粗略計算樣本值的分位數。通過這種方法,用戶不需要修改應用代碼,便可以動態減少抓取到的樣本數量。

假設某個 histogram 類型指標的樣本數據如下:

histogram的工作原理以及分位數的計算方法

現在我們希望 Prometheus 在抓取指標時丟棄響應時間在 100ms 以下的 bucket,就可以通過下面的 relabel 配置來實現:

histogram的工作原理以及分位數的計算方法

其中,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"}

3. 分位數計算

Prometheus 通過 histogram_quantile 函數來計算分位數(quantile),而且是一個預估值,并不完全準確,因為這個函數是假定每個區間內的樣本分布是線性分布來計算結果值的。預估的準確度取決于 bucket 區間劃分的粒度,粒度越大,準確度越低。以下圖為例:

histogram的工作原理以及分位數的計算方法

假設有 10000 個樣本,第 9501 個樣本落入了第 8 個 bucket。第 8 個 bucket 總共有 368 個樣本,其中第 9501 個樣本在該 bucket 中屬于第 93 個樣本。

根據 Prometheus 源代碼文件 promql/quantile.go 第 108 行的公式:

return bucketStart + (bucketEnd-bucketStart)*float64(rank/count)

我們可以計算(quantile=0.95)的樣本值為:

histogram的工作原理以及分位數的計算方法

這個值已經很接近精確的分位數值了。關于 histogram_quantile 函數的詳細使用方式,請參考:PromQL 內置函數。

到此,關于“ histogram的工作原理以及分位數的計算方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临漳县| 大港区| 南岸区| 朝阳县| 庆安县| 格尔木市| 葫芦岛市| 陆河县| 辽宁省| 和硕县| 筠连县| 乌拉特中旗| 德阳市| 前郭尔| 辽中县| 繁昌县| 旌德县| 织金县| 昭苏县| 如皋市| 老河口市| 汝阳县| 禹州市| 台前县| 海盐县| 望城县| 龙川县| 法库县| 汕头市| 方正县| 措勤县| 赣州市| 保亭| 灵宝市| 馆陶县| 韶山市| 贡山| 嘉祥县| 孝义市| 兴安县| 延安市|