Skip to content

Commit 9ccdc08

Browse files
committed
change from state to updowncounter for wider compatibility
1 parent c985e86 commit 9ccdc08

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

instrumentation/jmx-metrics/library/kafka-connect.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Kafka Connect Metrics
22

33
Here is the list of metrics based on MBeans exposed by Apache Kafka Connect. String-valued JMX
4-
attributes (class/type/version information) are exported as state metrics with value `1` and
5-
carry the raw string value as metric attributes.
4+
attributes (class/type/version information) are exported as `UpDownCounter` metrics with value `1`
5+
and carry the raw string value as metric attributes.
66

77
## Compatibility
88

instrumentation/jmx-metrics/library/src/main/resources/jmx/rules/kafka-connect.yaml

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ rules:
131131
# kafka.connect.worker.rebalance.protocol
132132
connect-protocol:
133133
metric: protocol
134-
type: state
134+
type: updowncounter
135135
desc: The Connect protocol used by this cluster.
136136
metricAttribute:
137137
kafka.connect.protocol.state:
@@ -147,7 +147,7 @@ rules:
147147
# kafka.connect.worker.rebalance.leader
148148
leader-name:
149149
metric: leader
150-
type: state
150+
type: updowncounter
151151
desc: The name of the group leader.
152152
metricAttribute:
153153
kafka.connect.worker.leader.state:
@@ -169,7 +169,7 @@ rules:
169169
# kafka.connect.worker.rebalance.active
170170
rebalancing:
171171
metric: active
172-
type: state
172+
type: updowncounter
173173
unit: "1"
174174
desc: Whether this worker is currently rebalancing.
175175
metricAttribute:
@@ -196,15 +196,15 @@ rules:
196196
# kafka.connect.connector.class
197197
connector-class:
198198
metric: class
199-
type: state
199+
type: updowncounter
200200
desc: The name of the connector class.
201201
metricAttribute:
202202
kafka.connect.connector.class.state:
203203
configured: "*"
204204
# kafka.connect.connector.type
205205
connector-type:
206206
metric: type
207-
type: state
207+
type: updowncounter
208208
desc: The type of the connector. One of 'source' or 'sink'.
209209
metricAttribute:
210210
kafka.connect.connector.type:
@@ -214,15 +214,15 @@ rules:
214214
# kafka.connect.connector.version
215215
connector-version:
216216
metric: version
217-
type: state
217+
type: updowncounter
218218
desc: The version of the connector class, as reported by the connector.
219219
metricAttribute:
220220
kafka.connect.connector.version.state:
221221
reported: "*"
222222
# kafka.connect.connector.status
223223
status:
224224
metric: status
225-
type: state
225+
type: updowncounter
226226
desc: Connector lifecycle state indicator (1 when the state matches the attribute value). Supports Apache and Confluent status values.
227227
metricAttribute:
228228
kafka.connect.connector.state:
@@ -247,15 +247,15 @@ rules:
247247
# kafka.connect.predicate.class
248248
predicate-class:
249249
metric: class
250-
type: state
250+
type: updowncounter
251251
desc: The class name of the predicate class
252252
metricAttribute:
253253
kafka.connect.predicate.class.state:
254254
configured: "*"
255255
# kafka.connect.predicate.version
256256
predicate-version:
257257
metric: version
258-
type: state
258+
type: updowncounter
259259
desc: The version of the predicate class
260260
metricAttribute:
261261
kafka.connect.predicate.version.state:
@@ -293,15 +293,15 @@ rules:
293293
# kafka.connect.task.connector.class
294294
connector-class:
295295
metric: connector.class
296-
type: state
296+
type: updowncounter
297297
desc: The name of the connector class.
298298
metricAttribute:
299299
kafka.connect.task.connector.class.state:
300300
configured: "*"
301301
# kafka.connect.task.connector.type
302302
connector-type:
303303
metric: connector.type
304-
type: state
304+
type: updowncounter
305305
desc: The type of the connector. One of 'source' or 'sink'.
306306
metricAttribute:
307307
kafka.connect.task.connector.type:
@@ -311,39 +311,39 @@ rules:
311311
# kafka.connect.task.connector.version
312312
connector-version:
313313
metric: connector.version
314-
type: state
314+
type: updowncounter
315315
desc: The version of the connector class, as reported by the connector.
316316
metricAttribute:
317317
kafka.connect.task.connector.version.state:
318318
reported: "*"
319319
# kafka.connect.task.header.converter.class
320320
header-converter-class:
321321
metric: header.converter.class
322-
type: state
322+
type: updowncounter
323323
desc: The fully qualified class name from header.converter
324324
metricAttribute:
325325
kafka.connect.task.header.converter.class.state:
326326
configured: "*"
327327
# kafka.connect.task.header.converter.version
328328
header-converter-version:
329329
metric: header.converter.version
330-
type: state
330+
type: updowncounter
331331
desc: The version instantiated for header.converter. May be undefined
332332
metricAttribute:
333333
kafka.connect.task.header.converter.version.state:
334334
reported: "*"
335335
# kafka.connect.task.key.converter.class
336336
key-converter-class:
337337
metric: key.converter.class
338-
type: state
338+
type: updowncounter
339339
desc: The fully qualified class name from key.converter
340340
metricAttribute:
341341
kafka.connect.task.key.converter.class.state:
342342
configured: "*"
343343
# kafka.connect.task.key.converter.version
344344
key-converter-version:
345345
metric: key.converter.version
346-
type: state
346+
type: updowncounter
347347
desc: The version instantiated for key.converter. May be undefined
348348
metricAttribute:
349349
kafka.connect.task.key.converter.version.state:
@@ -391,7 +391,7 @@ rules:
391391
# kafka.connect.task.status
392392
status:
393393
metric: status
394-
type: state
394+
type: updowncounter
395395
desc: The status of the connector task. Supports Apache (unassigned, running, paused, failed, restarting) and Confluent (unassigned, running, paused, failed, destroyed) values.
396396
metricAttribute:
397397
kafka.connect.task.state:
@@ -405,31 +405,31 @@ rules:
405405
# kafka.connect.task.class
406406
task-class:
407407
metric: task.class
408-
type: state
408+
type: updowncounter
409409
desc: The class name of the task.
410410
metricAttribute:
411411
kafka.connect.task.class.state:
412412
configured: "*"
413413
# kafka.connect.task.version
414414
task-version:
415415
metric: task.version
416-
type: state
416+
type: updowncounter
417417
desc: The version of the task.
418418
metricAttribute:
419419
kafka.connect.task.version.state:
420420
reported: "*"
421421
# kafka.connect.task.value.converter.class
422422
value-converter-class:
423423
metric: value.converter.class
424-
type: state
424+
type: updowncounter
425425
desc: The fully qualified class name from value.converter
426426
metricAttribute:
427427
kafka.connect.task.value.converter.class.state:
428428
configured: "*"
429429
# kafka.connect.task.value.converter.version
430430
value-converter-version:
431431
metric: value.converter.version
432-
type: state
432+
type: updowncounter
433433
desc: The version instantiated for value.converter. May be undefined
434434
metricAttribute:
435435
kafka.connect.task.value.converter.version.state:
@@ -447,15 +447,15 @@ rules:
447447
# kafka.connect.transform.class
448448
transform-class:
449449
metric: class
450-
type: state
450+
type: updowncounter
451451
desc: The class name of the transformation class
452452
metricAttribute:
453453
kafka.connect.transform.class.state:
454454
configured: "*"
455455
# kafka.connect.transform.version
456456
transform-version:
457457
metric: version
458-
type: state
458+
type: updowncounter
459459
desc: The version of the transformation class
460460
metricAttribute:
461461
kafka.connect.transform.version.state:

instrumentation/jmx-metrics/library/src/test/java/io/opentelemetry/instrumentation/jmx/rules/KafkaConnectRuleTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import io.opentelemetry.api.common.Attributes;
1212
import io.opentelemetry.instrumentation.jmx.JmxTelemetry;
13+
import io.opentelemetry.instrumentation.jmx.engine.MetricInfo;
1314
import io.opentelemetry.instrumentation.jmx.yaml.JmxConfig;
1415
import io.opentelemetry.instrumentation.jmx.yaml.JmxRule;
1516
import io.opentelemetry.instrumentation.jmx.yaml.Metric;
@@ -61,6 +62,21 @@ void kafkaConnectConfigParsesAndBuilds() throws Exception {
6162
}
6263
}
6364

65+
@Test
66+
void kafkaConnectRulesUseBasicMetricTypes() throws Exception {
67+
JmxConfig config = loadKafkaConnectConfig();
68+
69+
assertThat(config.getRules())
70+
.allSatisfy(
71+
rule -> {
72+
assertThat(rule.getMetricType()).isNotEqualTo(MetricInfo.Type.STATE);
73+
rule
74+
.getMapping()
75+
.values()
76+
.forEach(metric -> assertThat(metric.getMetricType()).isNotEqualTo(MetricInfo.Type.STATE));
77+
});
78+
}
79+
6480
@Test
6581
void connectorStatusStateMappingPresent() throws Exception {
6682
JmxConfig config = loadKafkaConnectConfig();
@@ -69,6 +85,8 @@ void connectorStatusStateMappingPresent() throws Exception {
6985
getRuleForBean(config, "kafka.connect:type=connector-metrics,connector=*");
7086

7187
StateMapping stateMapping = getMetric(connectorRule, "status").getStateMapping();
88+
assertThat(getMetric(connectorRule, "status").getMetricType())
89+
.isEqualTo(MetricInfo.Type.UPDOWNCOUNTER);
7290
assertThat(stateMapping.isEmpty()).isFalse();
7391
assertThat(stateMapping.getStateKeys())
7492
.contains(
@@ -95,6 +113,8 @@ void taskStatusStateMappingSuperset() throws Exception {
95113
getRuleForBean(config, "kafka.connect:type=connector-task-metrics,connector=*,task=*");
96114

97115
StateMapping stateMapping = getMetric(connectorTaskRule, "status").getStateMapping();
116+
assertThat(getMetric(connectorTaskRule, "status").getMetricType())
117+
.isEqualTo(MetricInfo.Type.UPDOWNCOUNTER);
98118
assertThat(stateMapping.isEmpty()).isFalse();
99119
assertThat(stateMapping.getStateKeys())
100120
.contains(

0 commit comments

Comments
 (0)