如何使用gin作为服务器编写prometheus导出器指标

这是 prometheus golang-client 的官方例子吗?

package main

import (
    "log"
    "net/http"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{
        Name: "cpu_temperature_celsius",
        Help: "Current temperature of the CPU.",
    })


func init() {
    // Metrics have to be registered to be exposed:
    prometheus.MustRegister(cpuTemp)
}

func main() {
    cpuTemp.Set(65.3)

    // The Handler function provides a default handler to expose metrics
    // via an HTTP server. "/metrics" is the usual endpoint for that.
    http.Handle("/metrics", promhttp.Handler())
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在此代码中,http 服务器使用该promhttp库。

使用gin框架时如何修改指标处理程序?我没有在文档中找到答案。

回答

我们只是利用promhttp处理程序。

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "cpu_temperature_celsius",
    Help: "Current temperature of the CPU.",
})

func init() {
    prometheus.MustRegister(cpuTemp)
}

func prometheusHandler() gin.HandlerFunc {
    h := promhttp.Handler()

    return func(c *gin.Context) {
        h.ServeHTTP(c.Writer, c.Request)
    }
}

func main() {
    cpuTemp.Set(65.3)

    r := gin.New()

    r.GET("/", func(c *gin.Context) {
        c.JSON(200, "Hello world!")
    })

    r.GET("/metrics", prometheusHandler())

    r.Run()
}

或者我们总是可以切换到 Prometheus 中间件 - https://github.com/zsais/go-gin-prometheus


以上是如何使用gin作为服务器编写prometheus导出器指标的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>