1. 程式人生 > >go監控方案(2) -- metrics

go監控方案(2) -- metrics

metrics

介紹

Metrics本來是一個Java庫, 捕獲JVM和應用程式級指標。也就是說可以獲得程式碼級別的資料指標,比如方法呼叫了多少次之類。

goalng 在github上使用的包是 https://github.com/rcrowley/go-metrics.git

go-metrics

這個庫官方採納的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的一個組合,比如要統計當前請求的速率和處理時間。

參考

Metrics 是個什麼鬼 之入門教程

使用Metrics監控應