go監控方案(2) -- metrics
metrics
介紹
Metrics本來是一個Java庫, 捕獲JVM和應用程式級指標。也就是說可以獲得程式碼級別的資料指標,比如方法呼叫了多少次之類。
goalng 在github上使用的包是 https://github.com/rcrowley/go-metrics.git
這個庫官方採納的influxdb 方案只提供了TCP連線功能,然而我想要用的是使用UDP進行資料傳輸,這樣對效能損耗較小。
這主要是由於influxdb是使用http作為API介面,採納的這個包自己實現了一套定時傳送http請求的方式去儲存資料。
MetricRegistry
Metrics中MetricRegistry是中心容器,它是程式中所有度量的容器,所有新的度量工具都要註冊到一個MetricRegistry例項中才可以使用,儘量在一個應用中保持讓這個MetricRegistry例項保持單例。
示例:
r := metrics.NewRegistry() // 整個系統全域性唯一
c := metrics.NewCounter() // 註冊一個計數器
r.Register(“counter”, c) // 這個註冊名全域性唯一
度量
Metrics提供5種基本的度量型別:Gauges, Counters, Histograms, Meters和 Timers
Gauge
Gauge是最簡單的度量型別,只有一個簡單的返回值,
他用來記錄一些物件或者事物的瞬時值。
類似於程式裡的常量,是不變的值。
Counter
Counter是一個簡單的計數器,他可以增加和減少。
類似於程式裡的全域性變數,可以增加和減少來改變值。
Meter
Meter是一種只能自增的計數器,通常用來度量一系列事件發生的比率。他提供了平均速率,以及指數平滑平均速率,以及取樣後的1分鐘,5分鐘,15分鐘速率。
類似於 QPS, 每一分鐘傳送多少次
Histrogram
Histrogram是用來度量流資料中Value的分佈情況,Histrogram可以計算最大/小值、平均值,方差,分位數(如中位數,或者95th分位數),如75%,90%,98%,99%的資料在哪個範圍內。
類似於柱狀圖
中位數
中位數,統計學中的專有名詞,代表一個樣本、種群或概率分佈中的一個數值,其可將數值集合劃分為相等的上下兩部分。
簡單說,就是一排資料從小到大排列後,中間那個數。
例如: 1,3,6,9,11。中間那個數是6,這就是中位數。1,3,6,9,11,13。這是有六個數,中間是兩個數了,那麼中位數就是6和9
四分位數
四分位數(Quartile)也稱四分位點,是指在統計學中把所有數值由小到大排列並分成四等份,處於三個分割點位置的數值。
首先確定四分位數的位置:
Q1的位置= (n+1) × 0.25
Q2的位置= (n+1) × 0.5
Q3的位置= (n+1) × 0.75
所以分位數,就是多少比例樣本表示的數值是多少。
Timer
Timer是Histogram跟Meter的一個組合,比如要統計當前請求的速率和處理時間。