...
1 package main
2
3 import (
4 "fmt"
5 "log"
6 "net"
7 "net/http"
8
9 "golang.org/x/net/context"
10 "google.golang.org/grpc"
11
12 "github.com/grpc-ecosystem/go-grpc-prometheus"
13 pb "github.com/grpc-ecosystem/go-grpc-prometheus/examples/grpc-server-with-prometheus/protobuf"
14 "github.com/prometheus/client_golang/prometheus"
15 "github.com/prometheus/client_golang/prometheus/promhttp"
16 )
17
18
19 type DemoServiceServer struct{}
20
21 func newDemoServer() *DemoServiceServer {
22 return &DemoServiceServer{}
23 }
24
25
26 func (s *DemoServiceServer) SayHello(ctx context.Context, request *pb.HelloRequest) (*pb.HelloResponse, error) {
27 customizedCounterMetric.WithLabelValues(request.Name).Inc()
28 return &pb.HelloResponse{Message: fmt.Sprintf("Hello %s", request.Name)}, nil
29 }
30
31 var (
32
33 reg = prometheus.NewRegistry()
34
35
36 grpcMetrics = grpc_prometheus.NewServerMetrics()
37
38
39 customizedCounterMetric = prometheus.NewCounterVec(prometheus.CounterOpts{
40 Name: "demo_server_say_hello_method_handle_count",
41 Help: "Total number of RPCs handled on the server.",
42 }, []string{"name"})
43 )
44
45 func init() {
46
47 reg.MustRegister(grpcMetrics, customizedCounterMetric)
48 customizedCounterMetric.WithLabelValues("Test")
49 }
50
51
52 func main() {
53
54 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 9093))
55 if err != nil {
56 log.Fatalf("failed to listen: %v", err)
57 }
58 defer lis.Close()
59
60
61 httpServer := &http.Server{Handler: promhttp.HandlerFor(reg, promhttp.HandlerOpts{}), Addr: fmt.Sprintf("0.0.0.0:%d", 9092)}
62
63
64 grpcServer := grpc.NewServer(
65 grpc.StreamInterceptor(grpcMetrics.StreamServerInterceptor()),
66 grpc.UnaryInterceptor(grpcMetrics.UnaryServerInterceptor()),
67 )
68
69
70 demoServer := newDemoServer()
71
72
73 pb.RegisterDemoServiceServer(grpcServer, demoServer)
74
75
76 grpcMetrics.InitializeMetrics(grpcServer)
77
78
79 go func() {
80 if err := httpServer.ListenAndServe(); err != nil {
81 log.Fatal("Unable to start a http server.")
82 }
83 }()
84
85
86 log.Fatal(grpcServer.Serve(lis))
87 }
88
View as plain text