From 5c66b8eb4e5d9f9f20aeccfa2ca680ad87dc62f1 Mon Sep 17 00:00:00 2001 From: matho Date: Thu, 16 Oct 2025 17:10:29 -0700 Subject: [PATCH 1/4] [jmx-scraper] Create weaver model for jmx-scraper metrics #2072 - created metrics.yaml weaver model - created attriutes.yaml - tested with weaver registry generate --- jmx-scraper/Makefile | 39 +++++ jmx-scraper/model/attributes.yaml | 16 ++ jmx-scraper/model/metrics.yaml | 146 ++++++++++++++++++ jmx-scraper/model/registry_manifest.yaml | 3 + .../registry/metadata/metadata.yaml.j2 | 33 ++++ jmx-scraper/weaver.yaml | 4 + 6 files changed, 241 insertions(+) create mode 100644 jmx-scraper/Makefile create mode 100644 jmx-scraper/model/attributes.yaml create mode 100644 jmx-scraper/model/metrics.yaml create mode 100644 jmx-scraper/model/registry_manifest.yaml create mode 100644 jmx-scraper/templates/registry/metadata/metadata.yaml.j2 create mode 100644 jmx-scraper/weaver.yaml diff --git a/jmx-scraper/Makefile b/jmx-scraper/Makefile new file mode 100644 index 000000000..fc8d6c9a8 --- /dev/null +++ b/jmx-scraper/Makefile @@ -0,0 +1,39 @@ +# https://github.com/open-telemetry/weaver/releases +# v0.18.0 +WEAVER_CONTAINER=otel/weaver@sha256:5425ade81dc22ddd840902b0638b4b6a9186fb654c5b50c1d1ccd31299437390 + +# Next - we want to run docker as our local file user, so generated code is not +# owned by root, and we don't give unecessary access. +# +# Determine if "docker" is actually podman +DOCKER_VERSION_OUTPUT := $(shell docker --version 2>&1) +DOCKER_IS_PODMAN := $(shell echo $(DOCKER_VERSION_OUTPUT) | grep -c podman) +ifeq ($(DOCKER_IS_PODMAN),0) + DOCKER_COMMAND := docker +else + DOCKER_COMMAND := podman +endif +DOCKER_RUN=$(DOCKER_COMMAND) run +DOCKER_USER=$(shell id -u):$(shell id -g) +DOCKER_USER_IS_HOST_USER_ARG=-u $(DOCKER_USER) +ifeq ($(DOCKER_COMMAND),podman) + # On podman, additional arguments are needed to make "-u" work + # correctly with the host user ID and host group ID. + # + # Error: OCI runtime error: crun: setgroups: Invalid argument + DOCKER_USER_IS_HOST_USER_ARG=--userns=keep-id -u $(DOCKER_USER) +endif + + +.PHONY: generate-metadata +generate-metadata: + $(DOCKER_RUN) \ + $(DOCKER_USER_IS_HOST_USER_ARG) \ + --mount 'type=bind,source=$(PWD)/model,target=/home/weaver/model,readonly' \ + --mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \ + --mount 'type=bind,source=$(PWD)/,target=/home/weaver/target' \ + ${WEAVER_CONTAINER} registry generate \ + --registry=/home/weaver/model \ + metadata \ + --future \ + /home/weaver/target diff --git a/jmx-scraper/model/attributes.yaml b/jmx-scraper/model/attributes.yaml new file mode 100644 index 000000000..5a46c5dcd --- /dev/null +++ b/jmx-scraper/model/attributes.yaml @@ -0,0 +1,16 @@ +groups: + - id: metric.attributes + type: attribute_group + brief: "Metric attributes." + attributes: + - id: pool.name + brief: "Pool name." + type: string + stability: beta + examples: [ "Memory pool 1", "Code Cache", "Metaspace", "Compressed Class Space"] + + - id: gc.name + brief: "Garbage Collector name." + type: string + stability: beta + examples: [ "Parallel GC", "G1 Young Generation"] diff --git a/jmx-scraper/model/metrics.yaml b/jmx-scraper/model/metrics.yaml new file mode 100644 index 000000000..46247c8e7 --- /dev/null +++ b/jmx-scraper/model/metrics.yaml @@ -0,0 +1,146 @@ +groups: + - id: jvm.class.loaded + type: metric + brief: "Number of classes loaded by the JVM." + metric_name: jvm.class.loaded + instrument: updowncounter + unit: "{class}" + stability: beta + + - id: jvm.gc.collections.count + type: metric + brief: "Total number of garbage collection that have occurred." + metric_name: jvm.gc.collections.count + instrument: counter + unit: "{collection}" + stability: beta + attributes: + - ref: gc.name + requirement_level: required + + - id: jvm.gc.collections.elapsed + type: metric + brief: "Approximate accumulated garbage collection elapsed time in milliseconds." + metric_name: jvm.gc.collections.elapsed + instrument: counter + unit: ms + stability: beta + attributes: + - ref: gc.name + requirement_level: required + + - id: jvm.memory.heap.committed + type: metric + brief: "Current committed heap memory usage." + metric_name: jvm.memory.heap.committed + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.heap.init + type: metric + brief: "Initial heap memory usage." + metric_name: jvm.memory.heap.init + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.heap.max + type: metric + brief: "Maximum heap memory usage." + metric_name: jvm.memory.heap.max + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.heap.used + type: metric + brief: "Current heap memory usage." + metric_name: jvm.memory.heap.used + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.nonheap.committed + type: metric + brief: "Current committed non-heap memory usage." + metric_name: jvm.memory.nonheap.committed + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.nonheap.init + type: metric + brief: "Initial non-heap memory usage." + metric_name: jvm.memory.nonheap.init + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.nonheap.max + type: metric + brief: "Maximum non-heap memory usage." + metric_name: jvm.memory.nonheap.max + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.nonheap.used + type: metric + brief: "Current non-heap memory usage." + metric_name: jvm.memory.nonheap.used + instrument: gauge + unit: By + stability: beta + + - id: jvm.memory.pool.committed + type: metric + brief: "Current memory pool committed usage." + metric_name: jvm.memory.pool.committed + instrument: gauge + unit: By + stability: beta + attributes: + - ref: pool.name + requirement_level: required + + - id: jvm.memory.pool.init + type: metric + brief: "Initial memory pool usage." + metric_name: jvm.memory.pool.init + instrument: gauge + unit: By + stability: beta + attributes: + - ref: pool.name + requirement_level: required + + - id: jvm.memory.pool.max + type: metric + brief: "Maximum memory pool usage." + metric_name: jvm.memory.pool.max + instrument: gauge + unit: By + stability: beta + attributes: + - ref: pool.name + requirement_level: required + + - id: jvm.memory.pool.used + type: metric + brief: "Current memory pool used usage." + metric_name: jvm.memory.pool.used + instrument: gauge + unit: By + stability: beta + attributes: + - ref: pool.name + requirement_level: required + + - id: jvm.threads.count + type: metric + brief: "Current number of thread count" + metric_name: jvm.threads.count + instrument: gauge + unit: "{thread}" + stability: beta diff --git a/jmx-scraper/model/registry_manifest.yaml b/jmx-scraper/model/registry_manifest.yaml new file mode 100644 index 000000000..61ff08c27 --- /dev/null +++ b/jmx-scraper/model/registry_manifest.yaml @@ -0,0 +1,3 @@ +name: JMX scraper +semconv_version: v0.1.0 +schema_base_url: https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/jmx-scraper/model diff --git a/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 b/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 new file mode 100644 index 000000000..a98b8233e --- /dev/null +++ b/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 @@ -0,0 +1,33 @@ +type: jmxscraper + +status: + class: jvm + stability: + beta: [metrics] + distributions: [contrib] + codeowners: + active: [mcmho] + seeking_new: true + +attributes: +{% for attr in (ctx.groups | selectattr("id", "equalto", "metric.attributes") | first).attributes %} {{ attr.name | safe }}: + description: {{ attr.brief | safe }} + type: {{ attr.type | safe }} +{% endfor %} +metrics: +{% for m in ctx.groups | selectattr("type", "equalto", "metric") %} {{ m.id | safe }}: + description: {{ m.brief | safe }} + {% if m.instrument == "counter" %}sum: + aggregation_temporality: cumulative + monotonic: true + value_type: int + {% elif m.instrument == "updowncounter" %}sum: + monotonic: false + aggregation_temporality: cumulative + value_type: int + {% else %}gauge: + value_type: int + {% endif %}unit: {{ m.unit }} +{% if m.attributes %} attributes:{% for attr in m.attributes %} + - {{ attr.name | safe }}{% endfor %} +{% endif %}{% endfor %} diff --git a/jmx-scraper/weaver.yaml b/jmx-scraper/weaver.yaml new file mode 100644 index 000000000..8ab2717ff --- /dev/null +++ b/jmx-scraper/weaver.yaml @@ -0,0 +1,4 @@ +templates: + - pattern: metadata.yaml.j2 + filter: '.' + application_mode: single From f05f357761df209b12968fd0910d4ccc3cb26fbd Mon Sep 17 00:00:00 2001 From: matho Date: Fri, 17 Oct 2025 00:32:39 -0700 Subject: [PATCH 2/4] [jmx-scraper] Create weaver model for jmx-scraper metrics #2072 - fixed typo --- jmx-scraper/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jmx-scraper/Makefile b/jmx-scraper/Makefile index fc8d6c9a8..d71ffcc20 100644 --- a/jmx-scraper/Makefile +++ b/jmx-scraper/Makefile @@ -3,7 +3,7 @@ WEAVER_CONTAINER=otel/weaver@sha256:5425ade81dc22ddd840902b0638b4b6a9186fb654c5b50c1d1ccd31299437390 # Next - we want to run docker as our local file user, so generated code is not -# owned by root, and we don't give unecessary access. +# owned by root, and we don't give unnecessary access. # # Determine if "docker" is actually podman DOCKER_VERSION_OUTPUT := $(shell docker --version 2>&1) From f7bb9235cf8ecad11e60a2f7f0d7f21b90776b91 Mon Sep 17 00:00:00 2001 From: matho Date: Wed, 22 Oct 2025 17:07:08 -0700 Subject: [PATCH 3/4] [jmx-scraper] Create weaver model for jmx-scraper metrics #2072 - tested weaver model locally as well as on docker - completed Makefile --- jmx-scraper/Makefile | 31 ++++- jmx-scraper/model/registry_manifest.yaml | 5 + jmx-scraper/src/main/resources/jvm.yaml | 8 +- .../registry/metadata/metadata.yaml.j2 | 33 ----- .../templates/registry/rules/jvm.yaml.j2 | 123 ++++++++++++++++++ jmx-scraper/weaver.yaml | 2 +- 6 files changed, 159 insertions(+), 43 deletions(-) delete mode 100644 jmx-scraper/templates/registry/metadata/metadata.yaml.j2 create mode 100644 jmx-scraper/templates/registry/rules/jvm.yaml.j2 diff --git a/jmx-scraper/Makefile b/jmx-scraper/Makefile index d71ffcc20..a11fb1247 100644 --- a/jmx-scraper/Makefile +++ b/jmx-scraper/Makefile @@ -24,16 +24,33 @@ ifeq ($(DOCKER_COMMAND),podman) DOCKER_USER_IS_HOST_USER_ARG=--userns=keep-id -u $(DOCKER_USER) endif - -.PHONY: generate-metadata -generate-metadata: +# Generate the rules files from the model +.PHONY: generate-rules +generate-rules: + mkdir -p output $(DOCKER_RUN) \ $(DOCKER_USER_IS_HOST_USER_ARG) \ --mount 'type=bind,source=$(PWD)/model,target=/home/weaver/model,readonly' \ --mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \ - --mount 'type=bind,source=$(PWD)/,target=/home/weaver/target' \ + --mount 'type=bind,source=$(PWD)/output,target=/home/weaver/output' \ + --mount 'type=bind,source=$(PWD),target=/home/weaver' \ ${WEAVER_CONTAINER} registry generate \ - --registry=/home/weaver/model \ - metadata \ + --registry /home/weaver/model \ + rules \ --future \ - /home/weaver/target + /home/weaver/output + cp ./output/jvm.yaml ./src/main/resources/jvm.yaml + +# for Debugging purposes only: run a shell in the weaver container +.PHONY: weaver-shell +weaver-shell: + mkdir -p output + @echo "DOCKER_USER_IS_HOST_USER_ARG is: $(DOCKER_USER_IS_HOST_USER_ARG)" + $(DOCKER_RUN) \ + $(DOCKER_USER_IS_HOST_USER_ARG) \ + --mount 'type=bind,source=$(PWD)/model,target=/home/weaver/model,readonly' \ + --mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \ + --mount 'type=bind,source=$(PWD)/output,target=/home/weaver/output' \ + --mount 'type=bind,source=$(PWD),target=/home/weaver' \ + --entrypoint sh \ + -it ${WEAVER_CONTAINER} diff --git a/jmx-scraper/model/registry_manifest.yaml b/jmx-scraper/model/registry_manifest.yaml index 61ff08c27..c62e0c632 100644 --- a/jmx-scraper/model/registry_manifest.yaml +++ b/jmx-scraper/model/registry_manifest.yaml @@ -1,3 +1,8 @@ name: JMX scraper semconv_version: v0.1.0 schema_base_url: https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/jmx-scraper/model + +# Define where weaver should look for templates +templates: + - id: jvm + file: templates/registry/rules/jvm.yaml.j2 diff --git a/jmx-scraper/src/main/resources/jvm.yaml b/jmx-scraper/src/main/resources/jvm.yaml index 733e679fd..5074de14f 100644 --- a/jmx-scraper/src/main/resources/jvm.yaml +++ b/jmx-scraper/src/main/resources/jvm.yaml @@ -1,7 +1,7 @@ --- rules: - + # Rule for ClassLoading metrics - bean: java.lang:type=ClassLoading mapping: LoadedClassCount: @@ -10,6 +10,7 @@ rules: unit: "{class}" desc: number of loaded classes + # Rule for Garbage Collector metrics - bean: java.lang:type=GarbageCollector,name=* mapping: CollectionCount: @@ -27,6 +28,7 @@ rules: metricAttribute: name: param(name) + # Rule for Heap and Non-Heap Memory metrics - bean: java.lang:type=Memory unit: By prefix: jvm.memory. @@ -64,6 +66,7 @@ rules: desc: current non-heap usage type: gauge + # Rule for Memory Pool metrics - bean: java.lang:type=MemoryPool,name=* type: gauge unit: By @@ -83,9 +86,10 @@ rules: metric: jvm.memory.pool.used desc: current memory pool usage + # Rule for Threading metrics - bean: java.lang:type=Threading mapping: ThreadCount: metric: jvm.threads.count unit: "{thread}" - desc: number of threads + desc: number of threads \ No newline at end of file diff --git a/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 b/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 deleted file mode 100644 index a98b8233e..000000000 --- a/jmx-scraper/templates/registry/metadata/metadata.yaml.j2 +++ /dev/null @@ -1,33 +0,0 @@ -type: jmxscraper - -status: - class: jvm - stability: - beta: [metrics] - distributions: [contrib] - codeowners: - active: [mcmho] - seeking_new: true - -attributes: -{% for attr in (ctx.groups | selectattr("id", "equalto", "metric.attributes") | first).attributes %} {{ attr.name | safe }}: - description: {{ attr.brief | safe }} - type: {{ attr.type | safe }} -{% endfor %} -metrics: -{% for m in ctx.groups | selectattr("type", "equalto", "metric") %} {{ m.id | safe }}: - description: {{ m.brief | safe }} - {% if m.instrument == "counter" %}sum: - aggregation_temporality: cumulative - monotonic: true - value_type: int - {% elif m.instrument == "updowncounter" %}sum: - monotonic: false - aggregation_temporality: cumulative - value_type: int - {% else %}gauge: - value_type: int - {% endif %}unit: {{ m.unit }} -{% if m.attributes %} attributes:{% for attr in m.attributes %} - - {{ attr.name | safe }}{% endfor %} -{% endif %}{% endfor %} diff --git a/jmx-scraper/templates/registry/rules/jvm.yaml.j2 b/jmx-scraper/templates/registry/rules/jvm.yaml.j2 new file mode 100644 index 000000000..a7415b1fa --- /dev/null +++ b/jmx-scraper/templates/registry/rules/jvm.yaml.j2 @@ -0,0 +1,123 @@ +--- + +rules: + # Rule for ClassLoading metrics + - bean: java.lang:type=ClassLoading + mapping: + LoadedClassCount: + {%- set m_class_loaded = (ctx.groups | selectattr("id", "equalto", "jvm.class.loaded") | first) %} + metric: jvm.classes.loaded + type: gauge + unit: "{{ m_class_loaded.unit | safe }}" + desc: number of loaded classes + + # Rule for Garbage Collector metrics + - bean: java.lang:type=GarbageCollector,name=* + mapping: + {%- for m in ctx.groups if m.id in ["jvm.gc.collections.count", "jvm.gc.collections.elapsed"] -%} + {%- if m.id == "jvm.gc.collections.count" %} + CollectionCount: + metric: {{ m.id | safe }} + type: {{ m.instrument | safe }} + unit: "{{ m.unit | safe }}" + desc: total number of collections that have occurred + metricAttribute: + name: param(name) + {%- elif m.id == "jvm.gc.collections.elapsed" %} + CollectionTime: + metric: {{ m.id | safe}} + type: {{ m.instrument | safe }} + unit: {{ m.unit | safe }} + desc: the approximate accumulated collection elapsed time in milliseconds + metricAttribute: + name: param(name) + {%- endif %} + {%- endfor %} + + # Rule for Heap and Non-Heap Memory metrics + - bean: java.lang:type=Memory + unit: By + prefix: jvm.memory. + mapping: + {%- for m in ctx.groups if m.id.startswith("jvm.memory.heap") %} + {%- if m.id == "jvm.memory.heap.committed" %} + HeapMemoryUsage.committed: + metric: heap.committed + desc: current heap usage + type: gauge + {%- elif m.id == "jvm.memory.heap.init" %} + HeapMemoryUsage.init: + metric: heap.init + desc: current heap usage + type: gauge + {%- elif m.id == "jvm.memory.heap.max" %} + HeapMemoryUsage.max: + metric: heap.max + desc: current heap usage + type: gauge + {%- elif m.id == "jvm.memory.heap.used" %} + HeapMemoryUsage.used: + metric: heap.used + desc: current heap usage + type: gauge + {%- endif %} + {%- endfor %} + {%- for m in ctx.groups if m.id.startswith("jvm.memory.nonheap") %} + {%- if m.id == "jvm.memory.nonheap.committed" %} + NonHeapMemoryUsage.committed: + metric: nonheap.committed + desc: current non-heap usage + type: gauge + {%- elif m.id == "jvm.memory.nonheap.init" %} + NonHeapMemoryUsage.init: + metric: nonheap.init + desc: current non-heap usage + type: gauge + {%- elif m.id == "jvm.memory.nonheap.max" %} + NonHeapMemoryUsage.max: + metric: nonheap.max + desc: current non-heap usage + type: gauge + {%- elif m.id == "jvm.memory.nonheap.used" %} + NonHeapMemoryUsage.used: + metric: nonheap.used + desc: current non-heap usage + type: gauge + {%- endif %} + {%- endfor %} + + # Rule for Memory Pool metrics + - bean: java.lang:type=MemoryPool,name=* + type: gauge + unit: By + metricAttribute: + name: param(name) + mapping: + {%- for m in ctx.groups if m.id.startswith("jvm.memory.pool") %} + {%- if m.id == "jvm.memory.pool.committed" %} + Usage.committed: + metric: jvm.memory.pool.committed + desc: current memory pool usage + {%- elif m.id == "jvm.memory.pool.init" %} + Usage.init: + metric: jvm.memory.pool.init + desc: current memory pool usage + {%- elif m.id == "jvm.memory.pool.max" %} + Usage.max: + metric: jvm.memory.pool.max + desc: current memory pool usage + {%- elif m.id == "jvm.memory.pool.used" %} + Usage.used: + metric: jvm.memory.pool.used + desc: current memory pool usage + {%- endif %} + {%- endfor %} + + # Rule for Threading metrics + - bean: java.lang:type=Threading + mapping: + ThreadCount: + {%- set m_threads_count = (ctx.groups | selectattr("id", "equalto", "jvm.threads.count") | first) %} + metric: {{ m_threads_count.id | safe}} + unit: "{{ m_threads_count.unit | safe }}" + desc: number of threads diff --git a/jmx-scraper/weaver.yaml b/jmx-scraper/weaver.yaml index 8ab2717ff..a41af21ec 100644 --- a/jmx-scraper/weaver.yaml +++ b/jmx-scraper/weaver.yaml @@ -1,4 +1,4 @@ templates: - - pattern: metadata.yaml.j2 + - pattern: jvm.yaml.j2 filter: '.' application_mode: single From 5ceb8e51f0a8f3b0d2f2b574f6c3818b36797e8d Mon Sep 17 00:00:00 2001 From: matho Date: Wed, 22 Oct 2025 18:21:44 -0700 Subject: [PATCH 4/4] [jmx-scraper] Create weaver model for jmx-scraper metrics #2072 - tested weaver model locally as well as on docker - completed Makefile --- jmx-scraper/model/metrics.yaml | 36 ++++---- jmx-scraper/src/main/resources/jvm.yaml | 12 +-- .../templates/registry/rules/jvm.yaml.j2 | 85 ++++++++++--------- 3 files changed, 67 insertions(+), 66 deletions(-) diff --git a/jmx-scraper/model/metrics.yaml b/jmx-scraper/model/metrics.yaml index 46247c8e7..44d1656af 100644 --- a/jmx-scraper/model/metrics.yaml +++ b/jmx-scraper/model/metrics.yaml @@ -1,15 +1,15 @@ groups: - - id: jvm.class.loaded + - id: jvm.classes.loaded type: metric - brief: "Number of classes loaded by the JVM." - metric_name: jvm.class.loaded + brief: "number of loaded classes" + metric_name: jvm.classes.loaded instrument: updowncounter unit: "{class}" stability: beta - id: jvm.gc.collections.count type: metric - brief: "Total number of garbage collection that have occurred." + brief: "total number of collections that have occurred" metric_name: jvm.gc.collections.count instrument: counter unit: "{collection}" @@ -20,7 +20,7 @@ groups: - id: jvm.gc.collections.elapsed type: metric - brief: "Approximate accumulated garbage collection elapsed time in milliseconds." + brief: "the approximate accumulated collection elapsed time in milliseconds" metric_name: jvm.gc.collections.elapsed instrument: counter unit: ms @@ -31,7 +31,7 @@ groups: - id: jvm.memory.heap.committed type: metric - brief: "Current committed heap memory usage." + brief: "current heap size" metric_name: jvm.memory.heap.committed instrument: gauge unit: By @@ -39,7 +39,7 @@ groups: - id: jvm.memory.heap.init type: metric - brief: "Initial heap memory usage." + brief: "initial heap size" metric_name: jvm.memory.heap.init instrument: gauge unit: By @@ -47,7 +47,7 @@ groups: - id: jvm.memory.heap.max type: metric - brief: "Maximum heap memory usage." + brief: "max heap size" metric_name: jvm.memory.heap.max instrument: gauge unit: By @@ -55,7 +55,7 @@ groups: - id: jvm.memory.heap.used type: metric - brief: "Current heap memory usage." + brief: "current heap usage" metric_name: jvm.memory.heap.used instrument: gauge unit: By @@ -63,7 +63,7 @@ groups: - id: jvm.memory.nonheap.committed type: metric - brief: "Current committed non-heap memory usage." + brief: "current non-heap size" metric_name: jvm.memory.nonheap.committed instrument: gauge unit: By @@ -71,7 +71,7 @@ groups: - id: jvm.memory.nonheap.init type: metric - brief: "Initial non-heap memory usage." + brief: "initial non-heap size" metric_name: jvm.memory.nonheap.init instrument: gauge unit: By @@ -79,7 +79,7 @@ groups: - id: jvm.memory.nonheap.max type: metric - brief: "Maximum non-heap memory usage." + brief: "max non-heap size" metric_name: jvm.memory.nonheap.max instrument: gauge unit: By @@ -87,7 +87,7 @@ groups: - id: jvm.memory.nonheap.used type: metric - brief: "Current non-heap memory usage." + brief: "current non-heap usage" metric_name: jvm.memory.nonheap.used instrument: gauge unit: By @@ -95,7 +95,7 @@ groups: - id: jvm.memory.pool.committed type: metric - brief: "Current memory pool committed usage." + brief: "current memory pool size" metric_name: jvm.memory.pool.committed instrument: gauge unit: By @@ -106,7 +106,7 @@ groups: - id: jvm.memory.pool.init type: metric - brief: "Initial memory pool usage." + brief: "initial memory pool size" metric_name: jvm.memory.pool.init instrument: gauge unit: By @@ -117,7 +117,7 @@ groups: - id: jvm.memory.pool.max type: metric - brief: "Maximum memory pool usage." + brief: "max memory pool size" metric_name: jvm.memory.pool.max instrument: gauge unit: By @@ -128,7 +128,7 @@ groups: - id: jvm.memory.pool.used type: metric - brief: "Current memory pool used usage." + brief: "current memory pool usage" metric_name: jvm.memory.pool.used instrument: gauge unit: By @@ -139,7 +139,7 @@ groups: - id: jvm.threads.count type: metric - brief: "Current number of thread count" + brief: "current number of thread count" metric_name: jvm.threads.count instrument: gauge unit: "{thread}" diff --git a/jmx-scraper/src/main/resources/jvm.yaml b/jmx-scraper/src/main/resources/jvm.yaml index 5074de14f..67a14cd79 100644 --- a/jmx-scraper/src/main/resources/jvm.yaml +++ b/jmx-scraper/src/main/resources/jvm.yaml @@ -35,15 +35,15 @@ rules: mapping: HeapMemoryUsage.committed: metric: heap.committed - desc: current heap usage + desc: current heap size type: gauge HeapMemoryUsage.init: metric: heap.init - desc: current heap usage + desc: initial heap size type: gauge HeapMemoryUsage.max: metric: heap.max - desc: current heap usage + desc: max heap size type: gauge HeapMemoryUsage.used: metric: heap.used @@ -51,15 +51,15 @@ rules: type: gauge NonHeapMemoryUsage.committed: metric: nonheap.committed - desc: current non-heap usage + desc: current non-heap size type: gauge NonHeapMemoryUsage.init: metric: nonheap.init - desc: current non-heap usage + desc: initial non-heap size type: gauge NonHeapMemoryUsage.max: metric: nonheap.max - desc: current non-heap usage + desc: max non-heap size type: gauge NonHeapMemoryUsage.used: metric: nonheap.used diff --git a/jmx-scraper/templates/registry/rules/jvm.yaml.j2 b/jmx-scraper/templates/registry/rules/jvm.yaml.j2 index a7415b1fa..3004f9755 100644 --- a/jmx-scraper/templates/registry/rules/jvm.yaml.j2 +++ b/jmx-scraper/templates/registry/rules/jvm.yaml.j2 @@ -1,15 +1,16 @@ --- - +{# Define a variable for the common "jvm.memory." prefix #} +{%- set jvm_memory_prefix = "jvm.memory." %} rules: # Rule for ClassLoading metrics - bean: java.lang:type=ClassLoading mapping: LoadedClassCount: - {%- set m_class_loaded = (ctx.groups | selectattr("id", "equalto", "jvm.class.loaded") | first) %} - metric: jvm.classes.loaded + {%- set m_class_loaded = (ctx.groups | selectattr("id", "equalto", "jvm.classes.loaded") | first) %} + metric: {{ m_class_loaded.metric_name | safe }} type: gauge unit: "{{ m_class_loaded.unit | safe }}" - desc: number of loaded classes + desc: {{ m_class_loaded.brief | safe }} # Rule for Garbage Collector metrics - bean: java.lang:type=GarbageCollector,name=* @@ -20,7 +21,7 @@ rules: metric: {{ m.id | safe }} type: {{ m.instrument | safe }} unit: "{{ m.unit | safe }}" - desc: total number of collections that have occurred + desc: {{ m.brief | safe }} metricAttribute: name: param(name) {%- elif m.id == "jvm.gc.collections.elapsed" %} @@ -28,7 +29,7 @@ rules: metric: {{ m.id | safe}} type: {{ m.instrument | safe }} unit: {{ m.unit | safe }} - desc: the approximate accumulated collection elapsed time in milliseconds + desc: {{ m.brief | safe }} metricAttribute: name: param(name) {%- endif %} @@ -37,51 +38,51 @@ rules: # Rule for Heap and Non-Heap Memory metrics - bean: java.lang:type=Memory unit: By - prefix: jvm.memory. + prefix: {{ jvm_memory_prefix | safe }} mapping: - {%- for m in ctx.groups if m.id.startswith("jvm.memory.heap") %} - {%- if m.id == "jvm.memory.heap.committed" %} + {%- for m in ctx.groups if m.id.startswith(jvm_memory_prefix + "heap") %} + {%- if m.id == jvm_memory_prefix + "heap.committed" %} HeapMemoryUsage.committed: - metric: heap.committed - desc: current heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.heap.init" %} + {%- elif m.id == jvm_memory_prefix + "heap.init" %} HeapMemoryUsage.init: - metric: heap.init - desc: current heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.heap.max" %} + {%- elif m.id == jvm_memory_prefix + "heap.max" %} HeapMemoryUsage.max: - metric: heap.max - desc: current heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.heap.used" %} + {%- elif m.id == jvm_memory_prefix + "heap.used" %} HeapMemoryUsage.used: - metric: heap.used - desc: current heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge {%- endif %} {%- endfor %} - {%- for m in ctx.groups if m.id.startswith("jvm.memory.nonheap") %} - {%- if m.id == "jvm.memory.nonheap.committed" %} + {%- for m in ctx.groups if m.id.startswith(jvm_memory_prefix + "nonheap") %} + {%- if m.id == jvm_memory_prefix + "nonheap.committed" %} NonHeapMemoryUsage.committed: - metric: nonheap.committed - desc: current non-heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.nonheap.init" %} + {%- elif m.id == jvm_memory_prefix + "nonheap.init" %} NonHeapMemoryUsage.init: - metric: nonheap.init - desc: current non-heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.nonheap.max" %} + {%- elif m.id == jvm_memory_prefix + "nonheap.max" %} NonHeapMemoryUsage.max: - metric: nonheap.max - desc: current non-heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge - {%- elif m.id == "jvm.memory.nonheap.used" %} + {%- elif m.id == jvm_memory_prefix + "nonheap.used" %} NonHeapMemoryUsage.used: - metric: nonheap.used - desc: current non-heap usage + metric: {{ m.id | replace(jvm_memory_prefix, "") | safe }} + desc: {{ m.brief | safe }} type: gauge {%- endif %} {%- endfor %} @@ -93,22 +94,22 @@ rules: metricAttribute: name: param(name) mapping: - {%- for m in ctx.groups if m.id.startswith("jvm.memory.pool") %} - {%- if m.id == "jvm.memory.pool.committed" %} + {%- for m in ctx.groups if m.id.startswith(jvm_memory_prefix + "pool") %} + {%- if m.id == jvm_memory_prefix + "pool.committed" %} Usage.committed: - metric: jvm.memory.pool.committed + metric: {{ m.id | safe }} desc: current memory pool usage - {%- elif m.id == "jvm.memory.pool.init" %} + {%- elif m.id == jvm_memory_prefix + "pool.init" %} Usage.init: - metric: jvm.memory.pool.init + metric: {{ m.id | safe }} desc: current memory pool usage - {%- elif m.id == "jvm.memory.pool.max" %} + {%- elif m.id == jvm_memory_prefix + "pool.max" %} Usage.max: - metric: jvm.memory.pool.max + metric: {{ m.id | safe }} desc: current memory pool usage - {%- elif m.id == "jvm.memory.pool.used" %} + {%- elif m.id == jvm_memory_prefix + "pool.used" %} Usage.used: - metric: jvm.memory.pool.used + metric: {{ m.id | safe }} desc: current memory pool usage {%- endif %} {%- endfor %}