Skip to content

Commit 51098f9

Browse files
authored
Add configuration files for JMX support. (#817)
*Description of changes:* ### 1. rules/*.yaml The [JMX Metric Insight](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/javaagent/README.md) and the [JMX Metric Gatherer](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/jmx-metrics) have different pre-defined target systems (activemq, tomcat, etc.) and even different metrics within each shared target system (open-telemetry/opentelemetry-java-instrumentation#9765). This is an effort to unify the metrics being generated by deferring to the Gatherer's definition files. By placing it in the same path as the JMX Metric Insight resources, the rule files can be overwritten and referred to [directly](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/jmx/JmxMetricInsightInstaller.java#L55). ``` > gradlew build > jar tf otelagent/build/libs/aws-opentelemetry-agent-1.33.0-SNAPSHOT.jar | grep jmx inst/META-INF/io/opentelemetry/instrumentation/io.opentelemetry.jmx-metrics.properties inst/io/opentelemetry/javaagent/shaded/instrumentation/javaagent/jmx/ inst/io/opentelemetry/javaagent/shaded/instrumentation/javaagent/jmx/JmxMetricInsightInstaller.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/ inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/ inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/AttributeInfo.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/BeanAttributeExtractor.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/BeanFinder$1.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/BeanFinder.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/BeanGroup.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/DetectionStatus.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/JmxMetricInsight.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricAttribute.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricAttributeExtractor.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricConfiguration.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricDef.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricExtractor.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricInfo$Type.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricInfo.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricRegistrar$1.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/engine/MetricRegistrar.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/ inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/JmxConfig.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/JmxRule.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/Metric.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/MetricStructure.classdata inst/io/opentelemetry/javaagent/shaded/instrumentation/jmx/yaml/RuleParser.classdata inst/jmx/ inst/jmx/rules/ inst/jmx/rules/activemq.yaml inst/jmx/rules/hadoop.yaml inst/jmx/rules/jetty.yaml inst/jmx/rules/kafka-broker.yaml inst/jmx/rules/tomcat.yaml inst/jmx/rules/wildfly.yaml inst/jmx/ inst/jmx/rules/ inst/jmx/rules/jvm.yaml inst/jmx/rules/kafka-consumer.yaml inst/jmx/rules/kafka-producer.yaml inst/jmx/rules/kafka.yaml inst/jmx/rules/tomcat.yaml inst/jmx/view.yaml ``` This makes it easier for users to specify the target systems via environment variables. ``` OTEL_JMX_TARGET_SYSTEM: jvm, tomcat ``` This results in ``` petclinic [otel.javaagent 2024-06-14 20:27:36:575 +0000] [main] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.yaml.RuleParser - jvm: found 5 metric rules petclinic [otel.javaagent 2024-06-14 20:27:36:607 +0000] [main] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.yaml.RuleParser - tomcat: found 6 metric rules petclinic [otel.javaagent 2024-06-14 20:27:37:731 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for jvm.classes.loaded petclinic [otel.javaagent 2024-06-14 20:27:37:738 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for jvm.gc.collections.count petclinic [otel.javaagent 2024-06-14 20:27:37:739 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for jvm.gc.collections.elapsed petclinic [otel.javaagent 2024-06-14 20:27:37:740 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for jvm.memory.heap petclinic [otel.javaagent 2024-06-14 20:27:37:740 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for jvm.memory.nonheap petclinic [otel.javaagent 2024-06-14 20:27:37:745 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for jvm.memory.pool.usage petclinic [otel.javaagent 2024-06-14 20:27:37:745 +0000] [pool-8-thread-1] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for jvm.threads.count ``` By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 4077ee0 commit 51098f9

File tree

5 files changed

+510
-5
lines changed

5 files changed

+510
-5
lines changed

instrumentation/jmx-metrics/src/main/resources/jmx/rules/jvm.yaml

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ rules:
88
LoadedClassCount:
99
metric: loaded
1010
desc: Number of loaded classes
11-
- bean: java.lang:type=GarbageCollector,*
11+
- bean: java.lang:type=GarbageCollector,name=*
1212
prefix: jvm.gc.collections.
1313
type: counter
1414
metricAttribute:
@@ -27,13 +27,31 @@ rules:
2727
prefix: jvm.memory.
2828
type: gauge
2929
mapping:
30+
HeapMemoryUsage.init:
31+
metric: heap.init
32+
desc: The initial amount of memory that the JVM requests from the operating system for the heap
3033
HeapMemoryUsage.used:
3134
metric: heap.used
3235
desc: The current heap usage
36+
HeapMemoryUsage.committed:
37+
metric: heap.committed
38+
desc: The amount of memory that is guaranteed to be available for the heap
39+
HeapMemoryUsage.max:
40+
metric: heap.max
41+
desc: The maximum amount of memory can be used for the heap
42+
NonHeapMemoryUsage.init:
43+
metric: nonheap.init
44+
desc: The initial amount of memory that the JVM requests from the operating system for non-heap purposes
3345
NonHeapMemoryUsage.used:
3446
metric: nonheap.used
35-
desc: The current non-heap usage
36-
- bean: java.lang:type=MemoryPool,*
47+
desc: The current non-heap memory usage
48+
NonHeapMemoryUsage.committed:
49+
metric: nonheap.committed
50+
desc: The amount of memory that is guaranteed to be available for non-heap purposes
51+
NonHeapMemoryUsage.max:
52+
metric: nonheap.max
53+
desc: The maximum amount of memory can be used for non-heap purposes
54+
- bean: java.lang:type=MemoryPool,name=*
3755
unit: by
3856
prefix: jvm.memory.pool.
3957
type: gauge
@@ -43,9 +61,18 @@ rules:
4361
CollectionUsage.used:
4462
metric: used_after_last_gc
4563
desc: Memory used after the most recent gc event
64+
Usage.init:
65+
metric: init
66+
desc: The initial amount of memory that the JVM requests from the operating system for the memory pool
4667
Usage.used:
4768
metric: used
48-
desc: Current memory pool used
69+
desc: The current memory pool memory usage
70+
Usage.committed:
71+
metric: committed
72+
desc: The amount of memory that is guaranteed to be available for the memory pool
73+
Usage.max:
74+
metric: max
75+
desc: The maximum amount of memory can be used for the memory pool
4976
- bean: java.lang:type=Threading
5077
unit: "1"
5178
prefix: jvm.threads.
@@ -54,7 +81,7 @@ rules:
5481
ThreadCount:
5582
metric: count
5683
desc: Number of threads
57-
- bean: java.lang:type=OperatingSystem,*
84+
- bean: java.lang:type=OperatingSystem
5885
prefix: jvm.cpu.
5986
type: gauge
6087
mapping:
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
rules:
3+
- bean: kafka.consumer:type=consumer-fetch-manager-metrics,client-id=*
4+
metricAttribute:
5+
client-id: param(client-id)
6+
mapping:
7+
fetch-rate:
8+
metric: kafka.consumer.fetch-rate
9+
type: gauge
10+
desc: The number of fetch requests for all topics per second
11+
unit: "1"
12+
records-lag-max:
13+
metric: kafka.consumer.records-lag-max
14+
type: gauge
15+
desc: Number of messages the consumer lags behind the producer
16+
unit: "1"
17+
bytes-consumed-rate:
18+
metric: kafka.consumer.total.bytes-consumed-rate
19+
type: gauge
20+
desc: The average number of bytes consumed for all topics per second
21+
unit: by
22+
fetch-size-avg:
23+
metric: kafka.consumer.total.fetch-size-avg
24+
type: gauge
25+
desc: The average number of bytes fetched per request for all topics
26+
unit: by
27+
records-consumed-rate:
28+
metric: kafka.consumer.total.records-consumed-rate
29+
type: gauge
30+
desc: The average number of records consumed for all topics per second
31+
unit: "1"
32+
- bean: kafka.consumer:type=consumer-fetch-manager-metrics,client-id=*,topic=*
33+
metricAttribute:
34+
client-id: param(client-id)
35+
topic: param(topic)
36+
mapping:
37+
bytes-consumed-rate:
38+
metric: kafka.consumer.bytes-consumed-rate
39+
type: gauge
40+
desc: The average number of bytes consumed per second
41+
unit: by
42+
fetch-size-avg:
43+
metric: kafka.consumer.fetch-size-avg
44+
type: gauge
45+
desc: The average number of bytes fetched per request
46+
unit: by
47+
records-consumed-rate:
48+
metric: kafka.consumer.records-consumed-rate
49+
type: gauge
50+
desc: The average number of records consumed per second
51+
unit: "1"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
rules:
3+
- bean: kafka.producer:type=producer-metrics,client-id=*
4+
metricAttribute:
5+
client-id: param(client-id)
6+
mapping:
7+
io-wait-time-ns-avg:
8+
metric: kafka.producer.io-wait-time-ns-avg
9+
type: gauge
10+
desc: The average length of time the I/O thread spent waiting for a socket ready for reads or writes
11+
unit: ns
12+
outgoing-byte-rate:
13+
metric: kafka.producer.outgoing-byte-rate
14+
type: gauge
15+
desc: The average number of outgoing bytes sent per second to all servers
16+
unit: by
17+
request-latency-avg:
18+
metric: kafka.producer.request-latency-avg
19+
type: gauge
20+
desc: The average request latency
21+
unit: ms
22+
request-rate:
23+
metric: kafka-producer.request-rate
24+
type: gauge
25+
desc: The average number of requests sent per second
26+
unit: "1"
27+
response-rate:
28+
metric: kafka.producer.response-rate
29+
type: gauge
30+
desc: Responses received per second
31+
unit: "1"
32+
- bean: kafka.producer:type=producer-topic-metrics,client-id=*,topic=*
33+
metricAttribute:
34+
client-id: param(client-id)
35+
topic: param(topic)
36+
mapping:
37+
byte-rate:
38+
metric: kafka.producer.byte-rate
39+
type: gauge
40+
desc: The average number of bytes sent per second for a topic
41+
unit: by
42+
compression-rate:
43+
metric: kafka.producer.compression-rate
44+
type: gauge
45+
desc: The average compression rate of record batches for a topic
46+
unit: "1"
47+
record-error-rate:
48+
metric: kafka.producer.record-error-rate
49+
type: gauge
50+
desc: The average per-second number of record sends that resulted in errors for a topic
51+
unit: "1"
52+
record-retry-rate:
53+
metric: kafka.producer.record-retry-rate
54+
type: gauge
55+
desc: The average per-second number of retried record sends for a topic
56+
unit: "1"
57+
record-send-rate:
58+
metric: kafka.producer.record-send-rate
59+
type: gauge
60+
desc: The average number of records sent per second for a topic
61+
unit: "1"

0 commit comments

Comments
 (0)