gin框架中使用prometheus統(tǒng)計(jì)http方法蔬咬、路徑和耗時(shí)

prometheus是一個(gè)開源的系統(tǒng)監(jiān)控和報(bào)警工具曹动,作為新一代的云原生監(jiān)控系統(tǒng),它可以和grafana等開源組件很好的結(jié)合在一起饰恕,也為golang提供了對(duì)應(yīng)的集成工具

這邊我主要介紹gin框架中如何集成prometheus來實(shí)現(xiàn)統(tǒng)計(jì)http方法和路徑

一挠羔、包依賴

在系統(tǒng)中先安裝好對(duì)應(yīng)的prometheus包,如下

go get github.com/gin-gonic/gin
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

二埋嵌、代碼實(shí)例

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
    "net/http"
    "time"
)

var (
    WebRequestTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "web_reqeust_total",
        Help: "Number of hello requests in total",
    }, []string{"method", "path"})
    WebRequestDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "http_request_duration_seconds",
        Help:    "Histogram of the duration of HTTP requests",
        Buckets: prometheus.DefBuckets,
    }, []string{"method", "path"})
)

func init() {
    // 注冊(cè)計(jì)數(shù)器到 Prometheus
    prometheus.MustRegister(WebRequestTotal)
    // 注冊(cè)直方圖到 Prometheus
    prometheus.MustRegister(WebRequestDurationHistogram)
}
func main() {
    r := gin.Default() //創(chuàng)建gin

    r.Use(func(c *gin.Context) {
        start := time.Now()
        //處理請(qǐng)求
        c.Next()
        duration := time.Since(start).Seconds()
        //記錄請(qǐng)求次數(shù)
        WebRequestTotal.WithLabelValues(c.Request.Method, c.Request.URL.Path).Inc()
           //記錄http方法和路徑對(duì)應(yīng)的耗時(shí)
        WebRequestDurationHistogram.WithLabelValues(c.Request.Method, c.Request.URL.Path).Observe(duration)
    })
    r.GET("/", index) //綁定路由
    r.GET("/metrics", gin.WrapH(promhttp.Handler()))
    // 定義一個(gè)健康檢查的路由
    r.GET("/health", func(c *gin.Context) {
        c.String(http.StatusOK, "OK")
    })
    r.POST("/update", func(c *gin.Context) {
        c.String(http.StatusOK, "OK")
    })
    r.Run(":8001") //運(yùn)行綁定端口
}

func index(c *gin.Context) {
    fmt.Println("1111")
    c.JSON(200, gin.H{
        "message": "go!go!gono!yesyes",
    })
}

說明

1破加、WebRequestTotal這是一個(gè)“CounterVec”類型的計(jì)數(shù)器,用于統(tǒng)計(jì)不同http方法和路徑的請(qǐng)求次數(shù)
2雹嗦、WebRequestDurationHistogram這是一個(gè)“HistogramVe”類型的直方圖拌喉,用于記錄不同http方法和路徑的請(qǐng)求持續(xù)時(shí)間,使用了“prometheus.DefBucket”提供的默認(rèn)的桶分布俐银,當(dāng)然這個(gè)也可以自定義
3尿背、采用了中間件
a、使用中間件攔截了請(qǐng)求捶惜,當(dāng)結(jié)束后更新對(duì)應(yīng)的計(jì)數(shù)器
b田藐、在中間件在請(qǐng)求開始和請(qǐng)求結(jié)束分別記錄了時(shí)間,得到請(qǐng)求的耗時(shí)吱七,并且記錄到了直方圖中
4汽久、通過訪問http://localhost:8001/metrics來實(shí)現(xiàn)對(duì)指標(biāo)的查詢

如下顯示的是不同http方法和路徑的請(qǐng)求次數(shù)


image.png

如下則顯示的是不同http方法和路徑的請(qǐng)求持續(xù)時(shí)間,安裝桶進(jìn)行分布


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踊餐,一起剝皮案震驚了整個(gè)濱河市景醇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吝岭,老刑警劉巖三痰,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧寺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡散劫,警方通過查閱死者的電腦和手機(jī)稚机,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來获搏,“玉大人赖条,你說我怎么就攤上這事〕N酰” “怎么了纬乍?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長裸卫。 經(jīng)常有香客問我蕾额,道長,這世上最難降的妖魔是什么彼城? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮退个,結(jié)果婚禮上募壕,老公的妹妹穿的比我還像新娘。我一直安慰自己语盈,他們只是感情好舱馅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刀荒,像睡著了一般代嗤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缠借,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天干毅,我揣著相機(jī)與錄音,去河邊找鬼泼返。 笑死硝逢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绅喉。 我是一名探鬼主播渠鸽,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柴罐!你這毒婦竟也來了徽缚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤革屠,失蹤者是張志新(化名)和其女友劉穎凿试,沒想到半個(gè)月后排宰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡红省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年额各,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧恃。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虾啦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痕寓,到底是詐尸還是另有隱情傲醉,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布呻率,位于F島的核電站硬毕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏礼仗。R本人自食惡果不足惜吐咳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望元践。 院中可真熱鬧韭脊,春花似錦、人聲如沸单旁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽象浑。三九已至蔫饰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愉豺,已是汗流浹背篓吁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚪拦,地道東北人越除。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像外盯,于是被迫代替她去往敵國和親摘盆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容