goframe接入Prometheus

286 阅读1分钟

做一件事,无论大小,倘无恒心,是很不好的。而看一切太难,固然能使人无成,但若看得太容易,也能使事情无结果。

背景

最近的项目用的框架是goframe来开发的,然后想要接入Prometheus来对go程序进行监控,查了网上的资料,都是基于原生的http路由,和goframe的路由注册不兼容。也有文章是使用rk-book来启动以及接入Prometheus,都不符合我的需求。在群里的朋友启发下可以参考chenjiandongx/ginprom: 📡 Prometheus metrics exporter for Gin. (github.com)自己修改下,成功注册了路由,以下是代码

func main() {
    s := g.Server()

    // 注册metrics路由
    s.BindHandler("/metrics", promAdapter(promhttp.Handler()))
    
    s.SetPort(8000)
    s.Run()

}

func promAdapter(handler http.Handler) func(*ghttp.Request) {
	return func(c *ghttp.Request) {
		handler.ServeHTTP(c.Response.Writer, c.Request)
	}
}

后续

之后在群里,goframe作者强哥回复我,可以更加简单处理,因为goframe本身就有封装的方法。是我自己没有发现哈哈哈,以下是强哥给出的示例

// HTTP Server for metrics exporting.
s := g.Server()

s.BindHandler("/metrics",ghttp.WrapH(promhttp.Handler()))

s.SetPort(8000)
s.Run( )

没错就是使用ghttp.WrapH方法来对promhttp.Handler()适配,希望对大家有所帮助