Skip to content

Commit 34bac1b

Browse files
committed
refactor: expose gcs metric names for doc generation
1 parent 7b70409 commit 34bac1b

File tree

2 files changed

+169
-13
lines changed

2 files changed

+169
-13
lines changed

storage/gcs/src/main/java/io/aiven/kafka/tieredstorage/storage/gcs/MetricCollector.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.List;
2121
import java.util.regex.Pattern;
2222

23+
import org.apache.kafka.common.MetricNameTemplate;
2324
import org.apache.kafka.common.metrics.JmxReporter;
2425
import org.apache.kafka.common.metrics.KafkaMetricsContext;
2526
import org.apache.kafka.common.metrics.MetricConfig;
@@ -37,7 +38,24 @@
3738
import com.google.cloud.ServiceOptions;
3839
import com.google.cloud.http.HttpTransportOptions;
3940

40-
class MetricCollector {
41+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.METRIC_CONTEXT;
42+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_DELETE;
43+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_DELETE_RATE_METRIC_NAME;
44+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_DELETE_TOTAL_METRIC_NAME;
45+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_GET;
46+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_GET_RATE_METRIC_NAME;
47+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_GET_TOTAL_METRIC_NAME;
48+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_METADATA_GET;
49+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_METADATA_GET_RATE_METRIC_NAME;
50+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.OBJECT_METADATA_GET_TOTAL_METRIC_NAME;
51+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_CHUNK_UPLOAD;
52+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_CHUNK_UPLOAD_RATE_METRIC_NAME;
53+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_CHUNK_UPLOAD_TOTAL_METRIC_NAME;
54+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_UPLOAD_INITIATE;
55+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_UPLOAD_INITIATE_RATE_METRIC_NAME;
56+
import static io.aiven.kafka.tieredstorage.storage.gcs.MetricRegistry.RESUMABLE_UPLOAD_INITIATE_TOTAL_METRIC_NAME;
57+
58+
public class MetricCollector {
4159
private final org.apache.kafka.common.metrics.Metrics metrics;
4260

4361
/**
@@ -64,33 +82,55 @@ class MetricCollector {
6482
static final Pattern OBJECT_UPLOAD_PATH_PATTERN =
6583
Pattern.compile("^/upload/storage/v1/b/([^/]+)/o/?$");
6684

67-
private static final String METRIC_GROUP = "gcs-client-metrics";
68-
6985
private final Sensor getObjectMetadataRequests;
7086
private final Sensor deleteObjectRequests;
7187
private final Sensor resumableUploadInitiateRequests;
7288
private final Sensor resumableChunkUploadRequests;
7389
private final Sensor getObjectRequests;
7490

75-
MetricCollector() {
91+
public MetricCollector() {
7692
final JmxReporter reporter = new JmxReporter();
7793

7894
metrics = new org.apache.kafka.common.metrics.Metrics(
7995
new MetricConfig(), List.of(reporter), Time.SYSTEM,
80-
new KafkaMetricsContext("aiven.kafka.server.tieredstorage.gcs")
96+
new KafkaMetricsContext(METRIC_CONTEXT)
8197
);
8298

83-
getObjectMetadataRequests = createSensor("object-metadata-get");
84-
getObjectRequests = createSensor("object-get");
85-
deleteObjectRequests = createSensor("object-delete");
86-
resumableUploadInitiateRequests = createSensor("resumable-upload-initiate");
87-
resumableChunkUploadRequests = createSensor("resumable-chunk-upload");
99+
getObjectMetadataRequests = createSensor(
100+
OBJECT_METADATA_GET,
101+
OBJECT_METADATA_GET_RATE_METRIC_NAME,
102+
OBJECT_METADATA_GET_TOTAL_METRIC_NAME
103+
);
104+
getObjectRequests = createSensor(
105+
OBJECT_GET,
106+
OBJECT_GET_RATE_METRIC_NAME,
107+
OBJECT_GET_TOTAL_METRIC_NAME
108+
);
109+
deleteObjectRequests = createSensor(
110+
OBJECT_DELETE,
111+
OBJECT_DELETE_RATE_METRIC_NAME,
112+
OBJECT_DELETE_TOTAL_METRIC_NAME
113+
);
114+
resumableUploadInitiateRequests = createSensor(
115+
RESUMABLE_UPLOAD_INITIATE,
116+
RESUMABLE_UPLOAD_INITIATE_RATE_METRIC_NAME,
117+
RESUMABLE_UPLOAD_INITIATE_TOTAL_METRIC_NAME
118+
);
119+
resumableChunkUploadRequests = createSensor(
120+
RESUMABLE_CHUNK_UPLOAD,
121+
RESUMABLE_CHUNK_UPLOAD_RATE_METRIC_NAME,
122+
RESUMABLE_CHUNK_UPLOAD_TOTAL_METRIC_NAME
123+
);
88124
}
89125

90-
private Sensor createSensor(final String name) {
126+
private Sensor createSensor(
127+
final String name,
128+
final MetricNameTemplate rateMetricName,
129+
final MetricNameTemplate totalMetricName
130+
) {
91131
final Sensor sensor = metrics.sensor(name);
92-
sensor.add(metrics.metricName(name + "-rate", METRIC_GROUP), new Rate());
93-
sensor.add(metrics.metricName(name + "-total", METRIC_GROUP), new CumulativeCount());
132+
sensor.add(metrics.metricInstance(rateMetricName), new Rate());
133+
sensor.add(metrics.metricInstance(totalMetricName), new CumulativeCount());
94134
return sensor;
95135
}
96136

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*
2+
* Copyright 2024 Aiven Oy
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.aiven.kafka.tieredstorage.storage.gcs;
18+
19+
import java.util.List;
20+
21+
import org.apache.kafka.common.MetricNameTemplate;
22+
23+
public class MetricRegistry {
24+
public static final String METRIC_CONTEXT = "aiven.kafka.server.tieredstorage.gcs";
25+
26+
static final String METRIC_GROUP = "gcs-client-metrics";
27+
static final String OBJECT_METADATA_GET = "object-metadata-get";
28+
static final String OBJECT_METADATA_GET_RATE = OBJECT_METADATA_GET + "-rate";
29+
static final String OBJECT_METADATA_GET_TOTAL = OBJECT_METADATA_GET + "-total";
30+
static final String OBJECT_METADATA_GET_DOC = "get object metadata operations";
31+
static final String OBJECT_GET = "object-get";
32+
static final String OBJECT_GET_RATE = OBJECT_GET + "-rate";
33+
static final String OBJECT_GET_TOTAL = OBJECT_GET + "-total";
34+
static final String OBJECT_GET_DOC = "get object operations";
35+
static final String OBJECT_DELETE = "object-delete";
36+
static final String OBJECT_DELETE_RATE = OBJECT_DELETE + "-rate";
37+
static final String OBJECT_DELETE_TOTAL = OBJECT_DELETE + "-total";
38+
static final String OBJECT_DELETE_DOC = "delete object operations";
39+
static final String RESUMABLE_UPLOAD_INITIATE = "resumable-upload-initiate";
40+
static final String RESUMABLE_UPLOAD_INITIATE_RATE = RESUMABLE_UPLOAD_INITIATE + "-rate";
41+
static final String RESUMABLE_UPLOAD_INITIATE_TOTAL = RESUMABLE_UPLOAD_INITIATE + "-total";
42+
static final String RESUMABLE_UPLOAD_INITIATE_DOC = "initiate resumable upload operations";
43+
static final String RESUMABLE_CHUNK_UPLOAD = "resumable-chunk-upload";
44+
static final String RESUMABLE_CHUNK_UPLOAD_RATE = RESUMABLE_CHUNK_UPLOAD + "-rate";
45+
static final String RESUMABLE_CHUNK_UPLOAD_TOTAL = RESUMABLE_CHUNK_UPLOAD + "-total";
46+
static final String RESUMABLE_CHUNK_UPLOAD_DOC = "upload chunk operations as part of resumable upload";
47+
48+
private static final String RATE_DOC_PREFIX = "Rate of ";
49+
private static final String TOTAL_DOC_PREFIX = "Total number of ";
50+
51+
static final MetricNameTemplate OBJECT_METADATA_GET_RATE_METRIC_NAME = new MetricNameTemplate(
52+
OBJECT_METADATA_GET_RATE,
53+
METRIC_GROUP,
54+
RATE_DOC_PREFIX + OBJECT_METADATA_GET_DOC
55+
);
56+
static final MetricNameTemplate OBJECT_METADATA_GET_TOTAL_METRIC_NAME = new MetricNameTemplate(
57+
OBJECT_METADATA_GET_TOTAL,
58+
METRIC_GROUP,
59+
TOTAL_DOC_PREFIX + OBJECT_METADATA_GET_DOC
60+
);
61+
static final MetricNameTemplate OBJECT_GET_RATE_METRIC_NAME = new MetricNameTemplate(
62+
OBJECT_GET_RATE,
63+
METRIC_GROUP,
64+
RATE_DOC_PREFIX + OBJECT_GET_DOC
65+
);
66+
static final MetricNameTemplate OBJECT_GET_TOTAL_METRIC_NAME = new MetricNameTemplate(
67+
OBJECT_GET_TOTAL,
68+
METRIC_GROUP,
69+
TOTAL_DOC_PREFIX + OBJECT_GET_DOC
70+
);
71+
static final MetricNameTemplate OBJECT_DELETE_RATE_METRIC_NAME = new MetricNameTemplate(
72+
OBJECT_DELETE_RATE,
73+
METRIC_GROUP,
74+
RATE_DOC_PREFIX + OBJECT_DELETE_DOC
75+
);
76+
static final MetricNameTemplate OBJECT_DELETE_TOTAL_METRIC_NAME = new MetricNameTemplate(
77+
OBJECT_DELETE_TOTAL,
78+
METRIC_GROUP,
79+
TOTAL_DOC_PREFIX + OBJECT_DELETE_DOC
80+
);
81+
static final MetricNameTemplate RESUMABLE_UPLOAD_INITIATE_RATE_METRIC_NAME = new MetricNameTemplate(
82+
RESUMABLE_UPLOAD_INITIATE_RATE,
83+
METRIC_GROUP,
84+
RATE_DOC_PREFIX + RESUMABLE_UPLOAD_INITIATE_DOC
85+
);
86+
static final MetricNameTemplate RESUMABLE_UPLOAD_INITIATE_TOTAL_METRIC_NAME = new MetricNameTemplate(
87+
RESUMABLE_UPLOAD_INITIATE_TOTAL,
88+
METRIC_GROUP,
89+
TOTAL_DOC_PREFIX + RESUMABLE_UPLOAD_INITIATE_DOC
90+
);
91+
static final MetricNameTemplate RESUMABLE_CHUNK_UPLOAD_RATE_METRIC_NAME = new MetricNameTemplate(
92+
RESUMABLE_CHUNK_UPLOAD_RATE,
93+
METRIC_GROUP,
94+
RATE_DOC_PREFIX + RESUMABLE_CHUNK_UPLOAD_DOC
95+
);
96+
static final MetricNameTemplate RESUMABLE_CHUNK_UPLOAD_TOTAL_METRIC_NAME = new MetricNameTemplate(
97+
RESUMABLE_CHUNK_UPLOAD_TOTAL,
98+
METRIC_GROUP,
99+
TOTAL_DOC_PREFIX + RESUMABLE_CHUNK_UPLOAD_DOC
100+
);
101+
102+
public List<MetricNameTemplate> all() {
103+
return List.of(
104+
OBJECT_METADATA_GET_RATE_METRIC_NAME,
105+
OBJECT_METADATA_GET_TOTAL_METRIC_NAME,
106+
OBJECT_GET_RATE_METRIC_NAME,
107+
OBJECT_GET_TOTAL_METRIC_NAME,
108+
OBJECT_DELETE_RATE_METRIC_NAME,
109+
OBJECT_DELETE_TOTAL_METRIC_NAME,
110+
RESUMABLE_UPLOAD_INITIATE_RATE_METRIC_NAME,
111+
RESUMABLE_UPLOAD_INITIATE_TOTAL_METRIC_NAME,
112+
RESUMABLE_CHUNK_UPLOAD_RATE_METRIC_NAME,
113+
RESUMABLE_CHUNK_UPLOAD_TOTAL_METRIC_NAME
114+
);
115+
}
116+
}

0 commit comments

Comments
 (0)