mirror of
https://github.com/zhufuyi/sponge.git
synced 2025-11-01 13:03:53 +08:00
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
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()
|
||
}
|