newrelic是一个非常好用的监控平台。请求分析,数据事务,机器运行状况,错误报警等功能,并且切分的力度足够细,除了贵之外,其他都很好。其实,好的服务都值这个价。
newrelic对各大语言的框架支持都很完善,对golang的支持也不差。不过官网提供的例子只是针对net/http而言。对于目前正在使用的gin来说,还是需要一下hack。好在gin足够优雅。下面就展示一下使用gin开发的时候注册newrelic。
先安装newrelic官方提供的golang包:
go get -u -v github.com/newrelic/go-agent
然后写一个中间件,用于请求前的hook,即注册到newrelic,代码比较简单,如下:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/newrelic/go-agent"
)
func NewrelicMiddleware(appName string, key string) gin.HandlerFunc {
if appName == "" || key == "" {
return func(c *gin.Context) {}
}
config := newrelic.NewConfig(appName, key)
app, err := newrelic.NewApplication(config)
if err != nil {
panic(err)
}
return func(c *gin.Context) {
txn := app.StartTransaction(c.Request.URL.Path, c.Writer, c.Request)
defer txn.End()
c.Next()
}
}
func main(){
router := gin.Default()
router.Use(NewrelicMiddleware("APP-NAME", "APP-KEY"))
router.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "It works")
})
router.Run()
}