Skip to content

Commit a043ab6

Browse files
authored
[Bug] MM2 should have its own default Strimzi Metrics configuration (#12180) (#12277)
Signed-off-by: Azeez Syed <syedazeez337@gmail.com>
1 parent 9f82c71 commit a043ab6

File tree

4 files changed

+88
-5
lines changed

4 files changed

+88
-5
lines changed

cluster-operator/src/main/java/io/strimzi/operator/cluster/model/KafkaConnectCluster.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,16 @@
9292
@SuppressWarnings({"checkstyle:ClassFanOutComplexity"})
9393
public class KafkaConnectCluster extends AbstractModel implements SupportsMetrics, SupportsLogging, SupportsJmx {
9494
/**
95-
* Default Strimzi Metrics Reporter allowlist.
95+
* Default Strimzi Metrics Reporter allowlist for Kafka Connect.
9696
* Check example dashboard compatibility in case of changes to existing regexes.
9797
*/
98-
private static final List<String> DEFAULT_METRICS_ALLOW_LIST = List.of(
98+
protected static final List<String> DEFAULT_METRICS_ALLOW_LIST = List.of(
9999
"kafka_admin_client_admin_client_metrics_connection_count",
100100
"kafka_connect_connect_coordinator_metrics.*",
101101
"kafka_connect_connector_metrics.*",
102102
"kafka_connect_connector_task_metrics.*",
103103
"kafka_connect_connect_worker_metrics_.*",
104104
"kafka_connect_connect_worker_rebalance.*",
105-
"kafka_connect_mirror_mirrorcheckpointconnector.*",
106-
"kafka_connect_mirror_mirrorsourceconnector.*",
107105
"kafka_connect_task_error_metrics.*",
108106
"kafka_consumer_consumer_coordinator_metrics.*",
109107
"kafka_consumer_consumer_fetch_manager_metrics.*",
@@ -113,6 +111,16 @@ public class KafkaConnectCluster extends AbstractModel implements SupportsMetric
113111
"kafka_producer_producer_topic.*"
114112
);
115113

114+
/**
115+
* Returns the default metrics allow list for this component.
116+
* Can be overridden by subclasses to provide component-specific defaults.
117+
*
118+
* @return List of default metrics allow list patterns
119+
*/
120+
protected List<String> getDefaultMetricsAllowList() {
121+
return DEFAULT_METRICS_ALLOW_LIST;
122+
}
123+
116124
/**
117125
* Port of the Kafka Connect REST API
118126
*/
@@ -287,7 +295,7 @@ protected static <C extends KafkaConnectCluster> C fromSpec(Reconciliation recon
287295
if (spec.getMetricsConfig() instanceof JmxPrometheusExporterMetrics) {
288296
result.metrics = new JmxPrometheusExporterModel(spec);
289297
} else if (spec.getMetricsConfig() instanceof StrimziMetricsReporter) {
290-
result.metrics = new StrimziMetricsReporterModel(spec, DEFAULT_METRICS_ALLOW_LIST);
298+
result.metrics = new StrimziMetricsReporterModel(spec, result.getDefaultMetricsAllowList());
291299
}
292300

293301
result.logging = new LoggingModel(spec, result.getClass().getSimpleName());

cluster-operator/src/main/java/io/strimzi/operator/cluster/model/KafkaMirrorMaker2Cluster.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import java.util.ArrayList;
3030
import java.util.Collection;
31+
import java.util.Collections;
3132
import java.util.HashMap;
3233
import java.util.HashSet;
3334
import java.util.List;
@@ -65,6 +66,19 @@ public class KafkaMirrorMaker2Cluster extends KafkaConnectCluster {
6566
}
6667
}
6768

69+
/**
70+
* Default Strimzi Metrics Reporter allowlist for MirrorMaker 2.
71+
* Inherits from Kafka Connect metrics and adds MM2-specific metrics.
72+
* Check example dashboard compatibility in case of changes to existing regexes.
73+
*/
74+
private static final List<String> DEFAULT_METRICS_ALLOW_LIST;
75+
static {
76+
List<String> list = new ArrayList<>(KafkaConnectCluster.DEFAULT_METRICS_ALLOW_LIST);
77+
list.add("kafka_connect_mirror_mirrorcheckpointconnector.*");
78+
list.add("kafka_connect_mirror_mirrorsourceconnector.*");
79+
DEFAULT_METRICS_ALLOW_LIST = Collections.unmodifiableList(list);
80+
}
81+
6882
private KafkaMirrorMaker2Connectors connectors;
6983
private Collection<KafkaMirrorMaker2ClusterSpec> clusters;
7084

@@ -450,4 +464,15 @@ public KafkaMirrorMaker2Connectors connectors() {
450464
public Collection<KafkaMirrorMaker2ClusterSpec> clusters() {
451465
return clusters;
452466
}
467+
468+
/**
469+
* Override the default metrics allow list to include MM2-specific metrics.
470+
* MirrorMaker 2 needs both Kafka Connect metrics and MM2-specific metrics.
471+
*
472+
* @return List of default metrics allow list patterns for MirrorMaker 2
473+
*/
474+
@Override
475+
protected List<String> getDefaultMetricsAllowList() {
476+
return DEFAULT_METRICS_ALLOW_LIST;
477+
}
453478
}

cluster-operator/src/test/java/io/strimzi/operator/cluster/model/KafkaConnectClusterTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2418,4 +2418,29 @@ public void testRoleAbdRoleBindingWithSecrets() {
24182418
assertThat(rb.getRoleRef().getKind(), is("Role"));
24192419
assertThat(rb.getRoleRef().getName(), is(kc.componentName));
24202420
}
2421+
2422+
@Test
2423+
public void testDefaultMetricsConfigurationDoesNotIncludeMM2Metrics() {
2424+
// Test that Kafka Connect default metrics do not include MM2-specific metrics
2425+
MetricsConfig metrics = new StrimziMetricsReporterBuilder().build();
2426+
2427+
KafkaConnect kafkaConnect = new KafkaConnectBuilder(RESOURCE)
2428+
.editSpec()
2429+
.withMetricsConfig(metrics)
2430+
.endSpec()
2431+
.build();
2432+
2433+
KafkaConnectCluster kc = KafkaConnectCluster.fromCrd(Reconciliation.DUMMY_RECONCILIATION, kafkaConnect, VERSIONS, SHARED_ENV_PROVIDER);
2434+
2435+
assertThat(kc.metrics(), is(notNullValue()));
2436+
String allowList = ((StrimziMetricsReporterModel) kc.metrics()).getAllowList();
2437+
2438+
// Verify MM2 metrics are NOT included in Kafka Connect default configuration
2439+
assertThat(allowList, not(containsString("mirrorcheckpointconnector")));
2440+
assertThat(allowList, not(containsString("mirrorsourceconnector")));
2441+
2442+
// Verify Connect metrics ARE included
2443+
assertThat(allowList, containsString("kafka_connect_connector_metrics"));
2444+
assertThat(allowList, containsString("kafka_connect_connect_worker_metrics_"));
2445+
}
24212446
}

cluster-operator/src/test/java/io/strimzi/operator/cluster/model/KafkaMirrorMaker2ClusterTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2547,4 +2547,29 @@ public void testRoleAbdRoleBindingWithSecrets() {
25472547
assertThat(rb.getRoleRef().getKind(), is("Role"));
25482548
assertThat(rb.getRoleRef().getName(), is(kmm2.componentName));
25492549
}
2550+
2551+
@Test
2552+
public void testDefaultMetricsConfigurationIncludesBothConnectAndMM2Metrics() {
2553+
// Test that MirrorMaker 2 default metrics include both Connect and MM2-specific metrics
2554+
MetricsConfig metrics = new StrimziMetricsReporterBuilder().build();
2555+
2556+
KafkaMirrorMaker2 kafkaMirrorMaker2 = new KafkaMirrorMaker2Builder(RESOURCE)
2557+
.editSpec()
2558+
.withMetricsConfig(metrics)
2559+
.endSpec()
2560+
.build();
2561+
2562+
KafkaMirrorMaker2Cluster kmm2 = KafkaMirrorMaker2Cluster.fromCrd(Reconciliation.DUMMY_RECONCILIATION, kafkaMirrorMaker2, VERSIONS, SHARED_ENV_PROVIDER);
2563+
2564+
assertThat(kmm2.metrics(), is(notNullValue()));
2565+
String allowList = ((StrimziMetricsReporterModel) kmm2.metrics()).getAllowList();
2566+
2567+
// Verify MM2 metrics ARE included in MirrorMaker 2 default configuration
2568+
assertThat(allowList, containsString("mirrorcheckpointconnector"));
2569+
assertThat(allowList, containsString("mirrorsourceconnector"));
2570+
2571+
// Verify Connect metrics ARE also included
2572+
assertThat(allowList, containsString("kafka_connect_connector_metrics"));
2573+
assertThat(allowList, containsString("kafka_connect_connect_worker_metrics_"));
2574+
}
25502575
}

0 commit comments

Comments
 (0)