Monitoring

Hertz provides monitoring capabilities.

The framework doesn’t provide any monitoring, but only provides a Tracer interface. This interface can be implemented by yourself and be injected via WithTracer Option.

// Tracer is executed at the start and finish of an HTTP.
type Tracer interface {
    Start(ctx context.Context, c *app.RequestContext) context.Context
    Finish(ctx context.Context, c *app.RequestContext)
}

hertz-contrib provides a default prometheus monitoring extension,which can be used to do:

  • Server throughput monitoring
  • Request latency monitoring

The default tags include: HTTP Method, statusCode. Requests related information are stored in RequestContext, and this variable can be accessed after monitoring metrics scraped. You can implement and extend the monitoring functions according to your own requirements. Usage example:

Server

import (
  "context"

  "github.com/cloudwego/hertz/pkg/app"
  "github.com/cloudwego/hertz/pkg/app/server"
  "github.com/cloudwego/hertz/pkg/common/utils"
  "github.com/hertz-contrib/monitor-prometheus"
  )

func main() {
    ···
    h := server.Default(server.WithTracer(prometheus.NewServerTracer(":9091", "/hertz")))
    h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
      ctx.JSON(200, utils.H{"ping": "pong"})
    })
    h.Spin()
    ···
}

Currently, Client doesn’t expose Tracer interface, but monitoring capabilities can be implemented through middleware.

Related Repository https://github.com/hertz-contrib/monitor-prometheus


Last modified January 18, 2024 : Upload volo blog (#936) (1fc8abb)