()
| 49 | ) |
| 50 | |
| 51 | func main() { |
| 52 | flag.Parse() |
| 53 | exporter, err := prometheus.New() |
| 54 | if err != nil { |
| 55 | log.Fatalf("Failed to start prometheus exporter: %v", err) |
| 56 | } |
| 57 | provider := metric.NewMeterProvider(metric.WithReader(exporter)) |
| 58 | go http.ListenAndServe(*prometheusEndpoint, promhttp.Handler()) |
| 59 | |
| 60 | cleanup := csm.EnableObservability(context.Background(), opentelemetry.Options{MetricsOptions: opentelemetry.MetricsOptions{MeterProvider: provider}}) |
| 61 | defer cleanup() |
| 62 | |
| 63 | // Set up xds credentials that fall back to insecure as described in: |
| 64 | // https://cloud.google.com/service-mesh/docs/service-routing/security-proxyless-setup#workloads_are_unable_to_communicate_in_the_security_setup. |
| 65 | creds, err := xdscreds.NewClientCredentials(xdscreds.ClientOptions{FallbackCreds: insecure.NewCredentials()}) |
| 66 | if err != nil { |
| 67 | log.Fatalf("Failed to create xDS credentials: %v", err) |
| 68 | } |
| 69 | cc, err := grpc.NewClient(*target, grpc.WithTransportCredentials(creds)) |
| 70 | if err != nil { |
| 71 | log.Fatalf("Failed to start NewClient: %v", err) |
| 72 | } |
| 73 | defer cc.Close() |
| 74 | c := pb.NewGreeterClient(cc) |
| 75 | |
| 76 | // Make an RPC every second. This should trigger telemetry to be emitted from |
| 77 | // the client and the server. |
| 78 | for { |
| 79 | ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) |
| 80 | r, err := c.SayHello(ctx, &pb.HelloRequest{Name: *name}) |
| 81 | if err != nil { |
| 82 | log.Fatalf("Could not greet: %v", err) |
| 83 | } |
| 84 | fmt.Println(r) |
| 85 | time.Sleep(time.Second) |
| 86 | cancel() |
| 87 | } |
| 88 | } |
nothing calls this directly
no test coverage detected