Files
sponge/pkg/grpc/metrics/clientMetrics.go
zhuyasen 083a0499c1 init
2022-09-19 23:24:11 +08:00

63 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package metrics
import (
"net/http"
"sync"
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"google.golang.org/grpc"
)
// https://github.com/grpc-ecosystem/go-grpc-prometheus/tree/master/examples/grpc-server-with-prometheus
var (
// 创建一个Registry
cliReg = prometheus.NewRegistry()
// 初始化客户端默认的metrics
grpcClientMetrics = grpc_prometheus.NewClientMetrics()
// 执行一次
cliOnce sync.Once
)
func cliRegisterMetrics() {
cliOnce.Do(func() {
// 注册metrics才能进行采集自定义的metrics也需要注册
cliReg.MustRegister(grpcClientMetrics)
})
}
// ClientHTTPService 初始化客户端的prometheus的exporter服务使用 http://ip:port/metrics 获取数据
func ClientHTTPService(addr string) *http.Server {
httpServer := &http.Server{
Addr: addr,
Handler: promhttp.HandlerFor(cliReg, promhttp.HandlerOpts{}),
}
// 启动http服务
go func() {
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
panic("listen and serve error: " + err.Error())
}
}()
return httpServer
}
// ---------------------------------- client interceptor ----------------------------------
// UnaryClientMetrics metrics unary拦截器
func UnaryClientMetrics() grpc.UnaryClientInterceptor {
cliRegisterMetrics() // 在拦截器之前完成注册metrics只执行一次
return grpcClientMetrics.UnaryClientInterceptor()
}
// StreamClientMetrics metrics stream拦截器
func StreamClientMetrics() grpc.StreamClientInterceptor {
cliRegisterMetrics() // 在拦截器之前完成注册metrics只执行一次
return grpcClientMetrics.StreamClientInterceptor()
}