更新时间: 2023-02-23 01:47:38#golang Prometheus参考代码: Open-IM-Server 基础: https://www.maocaoying.com/topic/950 http : if config.Config.Prometheus.Enable { promePkg.NewApiRequestCounter() promePkg.NewApiRequestFailedCounter() promePkg.NewApiRequestSuccessCounter() r.Use(promePkg.PromeTheusMiddleware) r.GET("/metrics", promePkg.PrometheusHandler()) } ---------- func PrometheusHandler() gin.HandlerFunc { h := promhttp.Handler() return func(c *gin.Context) { h.ServeHTTP(c.Writer, c.Request) } } ------- func PromeTheusMiddleware(c *gin.Context) { PromeInc(ApiRequestCounter) w := &responseBodyWriter{body: &bytes.Buffer{}, ResponseWriter: c.Writer} c.Writer = w c.Next() if c.Writer.Status() == http.StatusOK { PromeInc(ApiRequestSuccessCounter) } else { PromeInc(ApiRequestFailedCounter) } } grpc: var grpcOpts []grpc.ServerOption if config.Config.Prometheus.Enable { promePkg.NewGrpcRequestCounter() promePkg.NewGrpcRequestFailedCounter() promePkg.NewGrpcRequestSuccessCounter() promePkg.NewUserRegisterCounter() promePkg.NewUserLoginCounter() grpcOpts = append(grpcOpts, []grpc.ServerOption{ // grpc.UnaryInterceptor(promePkg.UnaryServerInterceptorProme), grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor), grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor), }...) } srv := grpc.NewServer(grpcOpts...) defer srv.GracefulStop() // rpc 打开rpc同时也提供http metrics接口,在 rpc.run()之前 func StartPromeSrv(promethuesPort int) error { if config.Config.Prometheus.Enable { http.Handle("/metrics", promhttp.Handler()) err := http.ListenAndServe(":"+strconv.Itoa(promethuesPort), nil) return err } return nil }