Skip to content

Commit c6be7b4

Browse files
authored
feat: option to remove scopeinfo from prometheus metrics (#1639)
1 parent 77ef52a commit c6be7b4

13 files changed

Lines changed: 431 additions & 187 deletions

File tree

router-tests/prometheus_test.go

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ func TestPrometheus(t *testing.T) {
5050
requestTotalMetrics := requestTotal.GetMetric()
5151

5252
require.Len(t, requestTotalMetrics, 2)
53-
require.Len(t, requestTotalMetrics[0].Label, 12)
54-
require.Len(t, requestTotalMetrics[1].Label, 14)
5553

5654
require.Equal(t, []*io_prometheus_client.LabelPair{
5755
{
@@ -167,8 +165,6 @@ func TestPrometheus(t *testing.T) {
167165
requestsInFlightMetrics := requestsInFlight.GetMetric()
168166

169167
require.Len(t, requestsInFlightMetrics, 2)
170-
require.Len(t, requestsInFlightMetrics[0].Label, 9)
171-
require.Len(t, requestsInFlightMetrics[1].Label, 13)
172168

173169
require.Equal(t, []*io_prometheus_client.LabelPair{
174170
{
@@ -268,8 +264,6 @@ func TestPrometheus(t *testing.T) {
268264
requestDurationMetrics := requestDuration.GetMetric()
269265

270266
require.Len(t, requestDurationMetrics, 2)
271-
require.Len(t, requestDurationMetrics[0].Label, 12)
272-
require.Len(t, requestDurationMetrics[1].Label, 14)
273267

274268
require.Equal(t, []*io_prometheus_client.LabelPair{
275269
{
@@ -385,8 +379,6 @@ func TestPrometheus(t *testing.T) {
385379
responseContentLengthMetrics := responseContentLength.GetMetric()
386380

387381
require.Len(t, responseContentLengthMetrics, 2)
388-
require.Len(t, responseContentLengthMetrics[0].Label, 12)
389-
require.Len(t, responseContentLengthMetrics[1].Label, 14)
390382

391383
require.Equal(t, []*io_prometheus_client.LabelPair{
392384
{
@@ -502,7 +494,6 @@ func TestPrometheus(t *testing.T) {
502494
planningTimeMetrics := planningTime.GetMetric()
503495

504496
require.Len(t, planningTimeMetrics, 1)
505-
require.Len(t, planningTimeMetrics[0].Label, 12)
506497

507498
require.Equal(t, []*io_prometheus_client.LabelPair{
508499
{
@@ -613,8 +604,6 @@ func TestPrometheus(t *testing.T) {
613604
requestTotalMetrics := requestTotal.GetMetric()
614605

615606
require.Len(t, requestTotalMetrics, 2)
616-
require.Len(t, requestTotalMetrics[0].Label, 14)
617-
require.Len(t, requestTotalMetrics[1].Label, 16)
618607

619608
require.Equal(t, []*io_prometheus_client.LabelPair{
620609
{
@@ -746,8 +735,6 @@ func TestPrometheus(t *testing.T) {
746735
requestsInFlightMetrics := requestsInFlight.GetMetric()
747736

748737
require.Len(t, requestsInFlightMetrics, 2)
749-
require.Len(t, requestsInFlightMetrics[0].Label, 10)
750-
require.Len(t, requestsInFlightMetrics[1].Label, 15)
751738

752739
require.Equal(t, []*io_prometheus_client.LabelPair{
753740
{
@@ -859,8 +846,6 @@ func TestPrometheus(t *testing.T) {
859846
requestDurationMetrics := requestDuration.GetMetric()
860847

861848
require.Len(t, requestDurationMetrics, 2)
862-
require.Len(t, requestDurationMetrics[0].Label, 14)
863-
require.Len(t, requestDurationMetrics[1].Label, 16)
864849

865850
require.Equal(t, []*io_prometheus_client.LabelPair{
866851
{
@@ -992,8 +977,6 @@ func TestPrometheus(t *testing.T) {
992977
responseContentLengthMetrics := responseContentLength.GetMetric()
993978

994979
require.Len(t, responseContentLengthMetrics, 2)
995-
require.Len(t, responseContentLengthMetrics[0].Label, 14)
996-
require.Len(t, responseContentLengthMetrics[1].Label, 16)
997980

998981
require.Equal(t, []*io_prometheus_client.LabelPair{
999982
{
@@ -1170,8 +1153,6 @@ func TestPrometheus(t *testing.T) {
11701153
requestTotalMetrics := requestTotal.GetMetric()
11711154

11721155
require.Len(t, requestTotalMetrics, 2)
1173-
require.Len(t, requestTotalMetrics[0].Label, 13)
1174-
require.Len(t, requestTotalMetrics[1].Label, 15)
11751156

11761157
require.Equal(t, []*io_prometheus_client.LabelPair{
11771158
{
@@ -1295,8 +1276,6 @@ func TestPrometheus(t *testing.T) {
12951276
requestsInFlightMetrics := requestsInFlight.GetMetric()
12961277

12971278
require.Len(t, requestsInFlightMetrics, 2)
1298-
require.Len(t, requestsInFlightMetrics[0].Label, 10)
1299-
require.Len(t, requestsInFlightMetrics[1].Label, 14)
13001279

13011280
require.Equal(t, []*io_prometheus_client.LabelPair{
13021281
{
@@ -1404,8 +1383,6 @@ func TestPrometheus(t *testing.T) {
14041383
requestDurationMetrics := requestDuration.GetMetric()
14051384

14061385
require.Len(t, requestDurationMetrics, 2)
1407-
require.Len(t, requestDurationMetrics[0].Label, 13)
1408-
require.Len(t, requestDurationMetrics[1].Label, 15)
14091386

14101387
require.Equal(t, []*io_prometheus_client.LabelPair{
14111388
{
@@ -1529,8 +1506,6 @@ func TestPrometheus(t *testing.T) {
15291506
responseContentLengthMetrics := responseContentLength.GetMetric()
15301507

15311508
require.Len(t, responseContentLengthMetrics, 2)
1532-
require.Len(t, responseContentLengthMetrics[0].Label, 13)
1533-
require.Len(t, responseContentLengthMetrics[1].Label, 15)
15341509

15351510
require.Equal(t, []*io_prometheus_client.LabelPair{
15361511
{
@@ -1688,8 +1663,6 @@ func TestPrometheus(t *testing.T) {
16881663
totalRequestErrorsMetric := totalRequestsErrors.GetMetric()
16891664

16901665
require.Len(t, totalRequestErrorsMetric, 2)
1691-
require.Len(t, totalRequestErrorsMetric[0].Label, 12)
1692-
require.Len(t, totalRequestErrorsMetric[1].Label, 14)
16931666

16941667
// Error metric for the subgraph error
16951668
require.Equal(t, []*io_prometheus_client.LabelPair{
@@ -1873,10 +1846,6 @@ func TestPrometheus(t *testing.T) {
18731846
*/
18741847

18751848
require.Len(t, totalRequestErrorsMetric, 4)
1876-
require.Len(t, totalRequestErrorsMetric[0].Label, 13)
1877-
require.Len(t, totalRequestErrorsMetric[1].Label, 13)
1878-
require.Len(t, totalRequestErrorsMetric[2].Label, 15)
1879-
require.Len(t, totalRequestErrorsMetric[3].Label, 15)
18801849

18811850
require.Equal(t, []*io_prometheus_client.LabelPair{
18821851
{
@@ -2145,8 +2114,6 @@ func TestPrometheus(t *testing.T) {
21452114
requestTotalMetrics := requestTotal.GetMetric()
21462115

21472116
require.Len(t, requestTotalMetrics, 2)
2148-
require.Len(t, requestTotalMetrics[0].Label, 13)
2149-
require.Len(t, requestTotalMetrics[1].Label, 15)
21502117

21512118
require.Equal(t, []*io_prometheus_client.LabelPair{
21522119
{
@@ -2270,8 +2237,6 @@ func TestPrometheus(t *testing.T) {
22702237
requestsInFlightMetrics := requestsInFlight.GetMetric()
22712238

22722239
require.Len(t, requestsInFlightMetrics, 2)
2273-
require.Len(t, requestsInFlightMetrics[0].Label, 10)
2274-
require.Len(t, requestsInFlightMetrics[1].Label, 14)
22752240

22762241
require.Equal(t, []*io_prometheus_client.LabelPair{
22772242
{
@@ -2379,8 +2344,6 @@ func TestPrometheus(t *testing.T) {
23792344
requestDurationMetrics := requestDuration.GetMetric()
23802345

23812346
require.Len(t, requestDurationMetrics, 2)
2382-
require.Len(t, requestDurationMetrics[0].Label, 13)
2383-
require.Len(t, requestDurationMetrics[1].Label, 15)
23842347

23852348
require.Equal(t, []*io_prometheus_client.LabelPair{
23862349
{
@@ -2504,8 +2467,6 @@ func TestPrometheus(t *testing.T) {
25042467
responseContentLengthMetrics := responseContentLength.GetMetric()
25052468

25062469
require.Len(t, responseContentLengthMetrics, 2)
2507-
require.Len(t, responseContentLengthMetrics[0].Label, 13)
2508-
require.Len(t, responseContentLengthMetrics[1].Label, 15)
25092470

25102471
require.Equal(t, []*io_prometheus_client.LabelPair{
25112472
{
@@ -2656,8 +2617,6 @@ func TestPrometheus(t *testing.T) {
26562617
requestTotalMetrics := requestTotal.GetMetric()
26572618

26582619
require.Len(t, requestTotalMetrics, 2)
2659-
require.Len(t, requestTotalMetrics[0].Label, 12)
2660-
require.Len(t, requestTotalMetrics[1].Label, 14)
26612620

26622621
require.Equal(t, []*io_prometheus_client.LabelPair{
26632622
{
@@ -2773,8 +2732,6 @@ func TestPrometheus(t *testing.T) {
27732732
requestsInFlightMetrics := requestsInFlight.GetMetric()
27742733

27752734
require.Len(t, requestsInFlightMetrics, 2)
2776-
require.Len(t, requestsInFlightMetrics[0].Label, 9)
2777-
require.Len(t, requestsInFlightMetrics[1].Label, 13)
27782735

27792736
require.Equal(t, []*io_prometheus_client.LabelPair{
27802737
{
@@ -2869,7 +2826,6 @@ func TestPrometheus(t *testing.T) {
28692826
Value: PointerOf("employees"),
28702827
},
28712828
}, requestsInFlightMetrics[1].Label)
2872-
28732829
})
28742830

28752831
metricReaderFiltered := metric.NewManualReader()
@@ -2910,8 +2866,6 @@ func TestPrometheus(t *testing.T) {
29102866
requestsInFlightMetricsFiltered := requestsInFlightFiltered.GetMetric()
29112867

29122868
require.Len(t, requestsInFlightMetricsFiltered, 2)
2913-
require.Len(t, requestsInFlightMetricsFiltered[0].Label, 7)
2914-
require.Len(t, requestsInFlightMetricsFiltered[1].Label, 11)
29152869

29162870
require.Equal(t, []*io_prometheus_client.LabelPair{
29172871
{
@@ -2998,6 +2952,49 @@ func TestPrometheus(t *testing.T) {
29982952
})
29992953
})
30002954

2955+
t.Run("Collect and export OTEL metrics to Prometheus with exclude scope info", func(t *testing.T) {
2956+
t.Parallel()
2957+
2958+
var (
2959+
err error
2960+
mfFiltered []*io_prometheus_client.MetricFamily
2961+
)
2962+
2963+
metricReaderFiltered := metric.NewManualReader()
2964+
promRegistryFiltered := prometheus.NewRegistry()
2965+
2966+
testenv.Run(t, &testenv.Config{
2967+
MetricReader: metricReaderFiltered,
2968+
PrometheusRegistry: promRegistryFiltered,
2969+
MetricOptions: testenv.MetricOptions{
2970+
MetricExclusions: testenv.MetricExclusions{
2971+
ExcludeScopeInfo: true,
2972+
},
2973+
},
2974+
}, func(t *testing.T, xEnv *testenv.Environment) {
2975+
res := xEnv.MakeGraphQLRequestOK(testenv.GraphQLRequest{
2976+
Query: `query myQuery { employees { id } }`,
2977+
})
2978+
2979+
require.JSONEq(t, employeesIDData, res.Body)
2980+
2981+
mfFiltered, err = promRegistryFiltered.Gather()
2982+
require.NoError(t, err)
2983+
2984+
requestsInFlightFiltered := findMetricFamilyByName(mfFiltered, "router_http_requests_in_flight")
2985+
requestsInFlightMetricsFiltered := requestsInFlightFiltered.GetMetric()
2986+
2987+
require.Len(t, requestsInFlightMetricsFiltered, 2)
2988+
2989+
for _, metric := range requestsInFlightMetricsFiltered {
2990+
for _, label := range metric.Label {
2991+
require.NotEqual(t, PointerOf("otel_scope_name"), label.Name, "otel_scope_name should not be present")
2992+
require.NotEqual(t, PointerOf("otel_scope_version"), label.Name, "otel_scope_version should not be present")
2993+
}
2994+
}
2995+
})
2996+
})
2997+
30012998
t.Run("Collect correct default router cache metrics when OTLP is also enabled", func(t *testing.T) {
30022999
t.Parallel()
30033000

@@ -4269,8 +4266,6 @@ func TestPrometheusWithModule(t *testing.T) {
42694266
requestDurationMetrics := requestDuration.GetMetric()
42704267

42714268
require.Len(t, requestDurationMetrics, 2)
4272-
require.Len(t, requestDurationMetrics[0].Label, 12)
4273-
require.Len(t, requestDurationMetrics[1].Label, 14)
42744269

42754270
require.Equal(t, []*io_prometheus_client.LabelPair{
42764271
{

router-tests/testenv/testenv.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ type MetricExclusions struct {
240240
ExcludedPrometheusMetricLabels []*regexp.Regexp
241241
ExcludedOTLPMetrics []*regexp.Regexp
242242
ExcludedOTLPMetricLabels []*regexp.Regexp
243+
ExcludeScopeInfo bool
243244
}
244245

245246
type EngineStatOptions struct {
@@ -949,6 +950,7 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node
949950
},
950951
ExcludeMetrics: testConfig.MetricOptions.MetricExclusions.ExcludedPrometheusMetrics,
951952
ExcludeMetricLabels: testConfig.MetricOptions.MetricExclusions.ExcludedPrometheusMetricLabels,
953+
ExcludeScopeInfo: testConfig.MetricOptions.MetricExclusions.ExcludeScopeInfo,
952954
}
953955
}
954956

@@ -980,7 +982,6 @@ func configureRouter(listenerAddr string, testConfig *Config, routerConfig *node
980982
c.IsUsingCloudExporter = !testConfig.DisableSimulateCloudExporter
981983

982984
routerOpts = append(routerOpts, core.WithMetrics(c))
983-
984985
}
985986

986987
if testConfig.OverrideGraphQLPath != "" {

router/core/router.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2027,6 +2027,7 @@ func MetricConfigFromTelemetry(cfg *config.Telemetry) *rmetric.Config {
20272027
},
20282028
ExcludeMetrics: cfg.Metrics.Prometheus.ExcludeMetrics,
20292029
ExcludeMetricLabels: cfg.Metrics.Prometheus.ExcludeMetricLabels,
2030+
ExcludeScopeInfo: cfg.Metrics.Prometheus.ExcludeScopeInfo,
20302031
},
20312032
}
20322033
}

router/pkg/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type Prometheus struct {
9797
EngineStats EngineStats `yaml:"engine_stats" envPrefix:"PROMETHEUS_"`
9898
ExcludeMetrics RegExArray `yaml:"exclude_metrics,omitempty" env:"PROMETHEUS_EXCLUDE_METRICS"`
9999
ExcludeMetricLabels RegExArray `yaml:"exclude_metric_labels,omitempty" env:"PROMETHEUS_EXCLUDE_METRIC_LABELS"`
100+
ExcludeScopeInfo bool `yaml:"exclude_scope_info" envDefault:"false" env:"PROMETHEUS_EXCLUDE_SCOPE_INFO"`
100101
}
101102

102103
type MetricsOTLPExporter struct {

0 commit comments

Comments
 (0)