Prometheus如何收集gin框架的指标

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() {
    // 注册计数器到 Prometheus
    prometheus.MustRegister(WebRequestTotal)
    // 注册直方图到 Prometheus
    prometheus.MustRegister(WebRequestDurationHistogram)
}
func main() {
    r := gin.Default() //创建gin

    r.Use(func(c *gin.Context) {
        start := time.Now()
        //处理请求
        c.Next()
        duration := time.Since(start).Seconds()
        //记录请求次数
        WebRequestTotal.WithLabelValues(c.Request.Method, c.Request.URL.Path).Inc()
           //记录http方法和路径对应的耗时
        WebRequestDurationHistogram.WithLabelValues(c.Request.Method, c.Request.URL.Path).Observe(duration)
    })
    r.GET("/", index) //绑定路由
    r.GET("/metrics", gin.WrapH(promhttp.Handler()))
    r.Run(":8001") //运行绑定端口
}

func index(c *gin.Context) {
    fmt.Println("1111")
    c.JSON(200, gin.H{
        "message": "how are you?怎么是你?",
    })
}

posted @ 2024-08-15 15:16  朝阳1  阅读(8)  评论(0编辑  收藏  举报