這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
1. 概述
指標統計是實現APM(Application performance management)的基礎,通常通過一些指標的統計以及上報,我們可以瞭解程式的健全狀態,及時發現程式的問題,提前預估系統瓶頸.
指標(metric)目前的實現有metrics,這是java的實現,可以直接引入程式作為庫使用.go語言的實現見go-metrics.
另外,這裡只是將指標在記憶體中進行處理及計算,如果我們想要展示,需要將資料拋出來,這裡可以拋到日誌裡,也可以拋到時序資料庫,最簡單的做法就是直接拋到監控系統進行繪圖或者警示.因此本文後面將講解各指標的含義以及如何將計算好的資料拋到監控open-falcon
2.指標統計方式
2.1 Meters
用於計算一段時間內的計量,通常用於計算介面調用頻率,如QPS(每秒的次數),主要分為rateMean,Rate1/Rate5/Rate15等指標.
單位時間內發生的次數,如一分鐘發送100次,則該值為100/60.
1分鐘/5分鐘/15分鐘內的滑動平均值(moving average),
2.2 Gauges
用於對瞬時值的測量,如我們可以過一段時間就對記憶體的使用量進行統計,並上報,那麼所有的資料點集就是對應時間點的記憶體值,Gauges只有value指標.也就是上報的是什麼就是什麼.
2.3 Counter
計數類統計,可以進行加或減,也可以進行歸零操作,所有的操作都是在舊值的基礎上進行的.這裡可以通過每天歸零,然後新增註冊使用者時加1來統計每天的註冊使用者.
2.4 Histograms
主要用於對資料集中的值分布情況進行統計,典型的應用情境為介面耗時,介面每次調用都會產生耗時,記錄每次調用耗時來對介面耗時情況進行分析顯然不現實.因此將介面一段時間內的耗時看做資料集,並採集Count,Min, Max, Mean, Median, 75%, 95%, 99%等指標.以相對較小的資源消耗,來儘可能反應資料集的真實情況.
距離上次清理後產生的樣本數量.
樣本中的最小值
樣本中的最大值
所有樣本的求得的平均值
樣本中的中間位置的值.
樣本中的%75位置的值.
樣本中的%95位置的值.
樣本中的%99位置的值.
1.5 Timers
對某個代碼模組同時進行統計調用頻率以及調用耗時統計.指標就是Histograms以及Meters兩種統計方式的合集.
3.使用方式
更對詳細用法見go-metric文檔
3.1 Counter
c := metrics.NewCounter()metrics.Register("foo", c)//進行加操作c.Inc(47)//進行減操作c.Dec(1)//擷取出值c.Count()
3.2 Gauge
g := metrics.NewGauge()metrics.Register("bar", g)//更新瞬時值g.Update(47)//擷取出瞬時值g.Value()
3.3 Meters
m := metrics.NewMeter()metrics.Register("quux", m)//寫入資料集m.Mark(47)//擷取資料集唯讀快照m := metric.Snapshot()//資料集大小m.Count()//1分鐘滑動平均值m.Rate1()//5分鐘滑動平均值m.Rate5()//15分鐘滑動平均值m.Rate15()//平均值m.RateMean()
3.4 Histograms
h := metrics.NewHistogram(s)metrics.Register("baz", h)//寫入資料集h.Update(47)//擷取資料集唯讀快照h := metric.Snapshot()//資料集大小h.Count()//最小值h.Min()//最大值h.Max()//平均值h.Mean()ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99})//中位元ps[0]//75%的數ps[1]//95%的數ps[2]//99%的數ps[3]
3.5 Timer
t := metrics.NewTimer()metrics.Register("bang", t)t.Time(func() { //do some thing})t.Update(47)//擷取方式同meter以及Histograms
4. 指標上報到open-falcon
4.1 上報方式
代碼及使用方式見 go-metrics-falcon
實現資料上報open-falcon,只需要將所有資料取出,按open-falcon格式上報即可,這裡有涉及到上報json的定義,具體如下.
{ "endpoint": "$endpoint", "metric": "$name", "value": 2.2, "step": 60, "counterType": "GAUGE", "tags": "project=$projectName,metricType=meter,valueType=ratemean", "timestamp": 1524724608}
endpoint: 這一個一般是主機hostname,用於標註是哪台機器.
metric: 指標名,由使用者定義
value: 指標的值
step: 上報的時間周期
counterType: 上報的類型,這裡open-falcon只支援GAUGE以及COUNTER,因此統一使用GAUGE.
tags: 標籤,用於卻別指標,包含指標類型,實值型別,項目名三項.
timestamp: 指標上報的時間戳記,單位秒.
4.2 效果
,輸入endpoint, 然後在counter部分輸入項目名就可以過濾出該項目上報的所有指標.
點擊指標,進入查詢該指標的大圖.
同時我們可以對指標設定監控,具體見open-falcon文檔.
5.參考
metrics
go-metric
APM
open-falcon