TestSubChannelMetrics tests subchannel metrics emitted during connection lifecycle events (connect, disconnect, failure).
(t *testing.T)
| 1939 | // TestSubChannelMetrics tests subchannel metrics emitted during connection |
| 1940 | // lifecycle events (connect, disconnect, failure). |
| 1941 | func (s) TestSubChannelMetrics(t *testing.T) { |
| 1942 | // Start a single backend server. |
| 1943 | backend := stubserver.StartTestService(t, nil) |
| 1944 | port := itestutils.ParsePort(t, backend.Address) |
| 1945 | defer backend.Stop() |
| 1946 | |
| 1947 | // Configure xDS for that single backend. |
| 1948 | managementServer, nodeID, _, xdsResolver := setup.ManagementServerAndResolver(t) |
| 1949 | |
| 1950 | const serviceName = "my-service-client-side-xds" |
| 1951 | clusterName := "cluster-" + serviceName |
| 1952 | resources := e2e.DefaultClientResources(e2e.ResourceParams{ |
| 1953 | DialTarget: serviceName, |
| 1954 | NodeID: nodeID, |
| 1955 | Host: "localhost", |
| 1956 | Port: port, |
| 1957 | SecLevel: e2e.SecurityLevelNone, |
| 1958 | }) |
| 1959 | |
| 1960 | ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 1961 | defer cancel() |
| 1962 | if err := managementServer.Update(ctx, resources); err != nil { |
| 1963 | t.Fatal(err) |
| 1964 | } |
| 1965 | |
| 1966 | // Setup Telemetry. |
| 1967 | reader := metric.NewManualReader() |
| 1968 | provider := metric.NewMeterProvider(metric.WithReader(reader)) |
| 1969 | mo := opentelemetry.MetricsOptions{ |
| 1970 | MeterProvider: provider, |
| 1971 | Metrics: opentelemetry.DefaultMetrics().Add( |
| 1972 | "grpc.subchannel.connection_attempts_succeeded", |
| 1973 | "grpc.subchannel.open_connections", |
| 1974 | "grpc.subchannel.disconnections", |
| 1975 | "grpc.subchannel.connection_attempts_failed", |
| 1976 | ), |
| 1977 | OptionalLabels: []string{ |
| 1978 | "grpc.lb.locality", |
| 1979 | "grpc.lb.backend_service", |
| 1980 | "grpc.security_level", |
| 1981 | "grpc.disconnect_error", |
| 1982 | }, |
| 1983 | } |
| 1984 | |
| 1985 | target := fmt.Sprintf("xds:///%s", serviceName) |
| 1986 | cc, err := grpc.NewClient(target, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithResolvers(xdsResolver), opentelemetry.DialOption(opentelemetry.Options{MetricsOptions: mo})) |
| 1987 | if err != nil { |
| 1988 | t.Fatalf("Failed to create client: %v", err) |
| 1989 | } |
| 1990 | defer cc.Close() |
| 1991 | client := testgrpc.NewTestServiceClient(cc) |
| 1992 | |
| 1993 | if _, err := client.EmptyCall(ctx, &testpb.Empty{}); err != nil { |
| 1994 | t.Fatalf("rpc failed: %v", err) |
| 1995 | } |
| 1996 | |
| 1997 | targetAttr := attribute.String("grpc.target", target) |
| 1998 | localityAttr := attribute.String("grpc.lb.locality", `{region="region-1", zone="zone-1", sub_zone="subzone-1"}`) |
nothing calls this directly
no test coverage detected