如何解决如何使用 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
框架时修改指标处理程序?我在 documentation 中没有找到答案。
解决方法
我们只使用 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
,我将 prometheus 与其他库 https://github.com/Depado/ginprom 一起使用:
package main
import (
"github.com/Depado/ginprom"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
p := ginprom.New(
ginprom.Engine(r),ginprom.Subsystem("gin"),ginprom.Path("/metrics"),)
r.Use(p.Instrument())
r.GET("/hello/:id",func(c *gin.Context) {})
r.GET("/world/:id",func(c *gin.Context) {})
r.Run("127.0.0.1:8080")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。