Skip to content

Commit 8413d72

Browse files
endoramamergify-bot
authored andcommitted
[Metricbeat] gcp: refactor service based metric filter creation (#26973)
(cherry picked from commit e1185e4)
1 parent 92013b3 commit 8413d72

2 files changed

Lines changed: 19 additions & 11 deletions

File tree

x-pack/metricbeat/module/gcp/metrics/metrics_requester.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package metrics
77
import (
88
"context"
99
"fmt"
10-
"regexp"
1110
"strings"
1211
"sync"
1312
"time"
@@ -36,14 +35,14 @@ type timeSeriesWithAligner struct {
3635
aligner string
3736
}
3837

39-
func (r *metricsRequester) Metric(ctx context.Context, metricType string, timeInterval *monitoringpb.TimeInterval, aligner string) (out timeSeriesWithAligner) {
38+
func (r *metricsRequester) Metric(ctx context.Context, serviceName, metricType string, timeInterval *monitoringpb.TimeInterval, aligner string) (out timeSeriesWithAligner) {
4039
timeSeries := make([]*monitoringpb.TimeSeries, 0)
4140

4241
req := &monitoringpb.ListTimeSeriesRequest{
4342
Name: "projects/" + r.config.ProjectID,
4443
Interval: timeInterval,
4544
View: monitoringpb.ListTimeSeriesRequest_FULL,
46-
Filter: r.getFilterForMetric(metricType),
45+
Filter: r.getFilterForMetric(serviceName, metricType),
4746
Aggregation: &monitoringpb.Aggregation{
4847
PerSeriesAligner: gcp.AlignersMapToGCP[aligner],
4948
AlignmentPeriod: r.config.period,
@@ -85,7 +84,7 @@ func (r *metricsRequester) Metrics(ctx context.Context, sdc metricsConfig, metri
8584

8685
r.logger.Debugf("For metricType %s, metricMeta = %d", mt, metricMeta)
8786
interval, aligner := getTimeIntervalAligner(metricMeta.ingestDelay, metricMeta.samplePeriod, r.config.period, aligner)
88-
ts := r.Metric(ctx, mt, interval, aligner)
87+
ts := r.Metric(ctx, sdc.ServiceName, mt, interval, aligner)
8988
lock.Lock()
9089
defer lock.Unlock()
9190
results = append(results, ts)
@@ -96,19 +95,15 @@ func (r *metricsRequester) Metrics(ctx context.Context, sdc metricsConfig, metri
9695
return results, nil
9796
}
9897

99-
var serviceRegexp = regexp.MustCompile(`^(?P<service>[a-z]+)\.googleapis.com.*`)
100-
10198
// getFilterForMetric returns the filter associated with the corresponding filter. Some services like Pub/Sub fails
10299
// if they have a region specified.
103-
func (r *metricsRequester) getFilterForMetric(m string) (f string) {
100+
func (r *metricsRequester) getFilterForMetric(serviceName, m string) (f string) {
104101
f = fmt.Sprintf(`metric.type="%s"`, m)
105102
if r.config.Zone == "" && r.config.Region == "" {
106103
return
107104
}
108105

109-
service := serviceRegexp.ReplaceAllString(m, "${service}")
110-
111-
switch service {
106+
switch serviceName {
112107
case gcp.ServicePubsub, gcp.ServiceLoadBalancing, gcp.ServiceCloudFunctions:
113108
return
114109
case gcp.ServiceStorage:

x-pack/metricbeat/module/gcp/metrics/metrics_requester_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,78 +18,91 @@ func TestGetFilterForMetric(t *testing.T) {
1818
var logger = logp.NewLogger("test")
1919
cases := []struct {
2020
title string
21+
s string
2122
m string
2223
r metricsRequester
2324
expectedFilter string
2425
}{
2526
{
2627
"compute service with zone in config",
28+
"compute",
2729
"compute.googleapis.com/firewall/dropped_bytes_count",
2830
metricsRequester{config: config{Zone: "us-central1-a"}, logger: logger},
2931
"metric.type=\"compute.googleapis.com/firewall/dropped_bytes_count\" AND resource.labels.zone = starts_with(\"us-central1-a\")",
3032
},
3133
{
3234
"pubsub service with zone in config",
35+
"pubsub",
3336
"pubsub.googleapis.com/subscription/ack_message_count",
3437
metricsRequester{config: config{Zone: "us-central1-a"}, logger: logger},
3538
"metric.type=\"pubsub.googleapis.com/subscription/ack_message_count\"",
3639
},
3740
{
3841
"loadbalancing service with zone in config",
42+
"loadbalancing",
3943
"loadbalancing.googleapis.com/https/backend_latencies",
4044
metricsRequester{config: config{Zone: "us-central1-a"}, logger: logger},
4145
"metric.type=\"loadbalancing.googleapis.com/https/backend_latencies\"",
4246
},
4347
{
4448
"compute service with region in config",
49+
"compute",
4550
"compute.googleapis.com/firewall/dropped_bytes_count",
4651
metricsRequester{config: config{Region: "us-east1"}, logger: logger},
4752
"metric.type=\"compute.googleapis.com/firewall/dropped_bytes_count\" AND resource.labels.zone = starts_with(\"us-east1\")",
4853
},
4954
{
5055
"pubsub service with region in config",
56+
"pubsub",
5157
"pubsub.googleapis.com/subscription/ack_message_count",
5258
metricsRequester{config: config{Region: "us-east1"}, logger: logger},
5359
"metric.type=\"pubsub.googleapis.com/subscription/ack_message_count\"",
5460
},
5561
{
5662
"loadbalancing service with region in config",
63+
"loadbalancing",
5764
"loadbalancing.googleapis.com/https/backend_latencies",
5865
metricsRequester{config: config{Region: "us-east1"}, logger: logger},
5966
"metric.type=\"loadbalancing.googleapis.com/https/backend_latencies\"",
6067
},
6168
{
6269
"compute service with both region and zone in config",
70+
"compute",
6371
"compute.googleapis.com/firewall/dropped_bytes_count",
6472
metricsRequester{config: config{Region: "us-central1", Zone: "us-central1-a"}, logger: logger},
6573
"metric.type=\"compute.googleapis.com/firewall/dropped_bytes_count\" AND resource.labels.zone = starts_with(\"us-central1\")",
6674
},
6775
{
6876
"compute uptime with partial region",
77+
"compute",
6978
"compute.googleapis.com/instance/uptime",
7079
metricsRequester{config: config{Region: "us-west"}, logger: logger},
7180
"metric.type=\"compute.googleapis.com/instance/uptime\" AND resource.labels.zone = starts_with(\"us-west\")",
7281
},
7382
{
7483
"compute uptime with partial zone",
84+
"compute",
7585
"compute.googleapis.com/instance/uptime",
7686
metricsRequester{config: config{Zone: "us-west1-"}, logger: logger},
7787
"metric.type=\"compute.googleapis.com/instance/uptime\" AND resource.labels.zone = starts_with(\"us-west1-\")",
7888
},
7989
{
8090
"compute uptime with wildcard in region",
91+
"compute",
8192
"compute.googleapis.com/instance/uptime",
8293
metricsRequester{config: config{Region: "us-*"}, logger: logger},
8394
"metric.type=\"compute.googleapis.com/instance/uptime\" AND resource.labels.zone = starts_with(\"us-\")",
8495
},
8596
{
8697
"compute uptime with wildcard in zone",
98+
"compute",
8799
"compute.googleapis.com/instance/uptime",
88100
metricsRequester{config: config{Zone: "us-west1-*"}, logger: logger},
89101
"metric.type=\"compute.googleapis.com/instance/uptime\" AND resource.labels.zone = starts_with(\"us-west1-\")",
90102
},
91103
{
92104
"compute service with no region/zone in config",
105+
"compute",
93106
"compute.googleapis.com/firewall/dropped_bytes_count",
94107
metricsRequester{config: config{}, logger: logger},
95108
"metric.type=\"compute.googleapis.com/firewall/dropped_bytes_count\"",
@@ -98,7 +111,7 @@ func TestGetFilterForMetric(t *testing.T) {
98111

99112
for _, c := range cases {
100113
t.Run(c.title, func(t *testing.T) {
101-
filter := c.r.getFilterForMetric(c.m)
114+
filter := c.r.getFilterForMetric(c.s, c.m)
102115
assert.Equal(t, c.expectedFilter, filter)
103116
})
104117
}

0 commit comments

Comments
 (0)