Skip to content

Commit f7bb923

Browse files
committed
[jmx-scraper] Create weaver model for jmx-scraper metrics #2072
- tested weaver model locally as well as on docker - completed Makefile
1 parent f05f357 commit f7bb923

File tree

6 files changed

+159
-43
lines changed

6 files changed

+159
-43
lines changed

jmx-scraper/Makefile

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,33 @@ ifeq ($(DOCKER_COMMAND),podman)
2424
DOCKER_USER_IS_HOST_USER_ARG=--userns=keep-id -u $(DOCKER_USER)
2525
endif
2626

27-
28-
.PHONY: generate-metadata
29-
generate-metadata:
27+
# Generate the rules files from the model
28+
.PHONY: generate-rules
29+
generate-rules:
30+
mkdir -p output
3031
$(DOCKER_RUN) \
3132
$(DOCKER_USER_IS_HOST_USER_ARG) \
3233
--mount 'type=bind,source=$(PWD)/model,target=/home/weaver/model,readonly' \
3334
--mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \
34-
--mount 'type=bind,source=$(PWD)/,target=/home/weaver/target' \
35+
--mount 'type=bind,source=$(PWD)/output,target=/home/weaver/output' \
36+
--mount 'type=bind,source=$(PWD),target=/home/weaver' \
3537
${WEAVER_CONTAINER} registry generate \
36-
--registry=/home/weaver/model \
37-
metadata \
38+
--registry /home/weaver/model \
39+
rules \
3840
--future \
39-
/home/weaver/target
41+
/home/weaver/output
42+
cp ./output/jvm.yaml ./src/main/resources/jvm.yaml
43+
44+
# for Debugging purposes only: run a shell in the weaver container
45+
.PHONY: weaver-shell
46+
weaver-shell:
47+
mkdir -p output
48+
@echo "DOCKER_USER_IS_HOST_USER_ARG is: $(DOCKER_USER_IS_HOST_USER_ARG)"
49+
$(DOCKER_RUN) \
50+
$(DOCKER_USER_IS_HOST_USER_ARG) \
51+
--mount 'type=bind,source=$(PWD)/model,target=/home/weaver/model,readonly' \
52+
--mount 'type=bind,source=$(PWD)/templates,target=/home/weaver/templates,readonly' \
53+
--mount 'type=bind,source=$(PWD)/output,target=/home/weaver/output' \
54+
--mount 'type=bind,source=$(PWD),target=/home/weaver' \
55+
--entrypoint sh \
56+
-it ${WEAVER_CONTAINER}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
name: JMX scraper
22
semconv_version: v0.1.0
33
schema_base_url: https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/jmx-scraper/model
4+
5+
# Define where weaver should look for templates
6+
templates:
7+
- id: jvm
8+
file: templates/registry/rules/jvm.yaml.j2

jmx-scraper/src/main/resources/jvm.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22

33
rules:
4-
4+
# Rule for ClassLoading metrics
55
- bean: java.lang:type=ClassLoading
66
mapping:
77
LoadedClassCount:
@@ -10,6 +10,7 @@ rules:
1010
unit: "{class}"
1111
desc: number of loaded classes
1212

13+
# Rule for Garbage Collector metrics
1314
- bean: java.lang:type=GarbageCollector,name=*
1415
mapping:
1516
CollectionCount:
@@ -27,6 +28,7 @@ rules:
2728
metricAttribute:
2829
name: param(name)
2930

31+
# Rule for Heap and Non-Heap Memory metrics
3032
- bean: java.lang:type=Memory
3133
unit: By
3234
prefix: jvm.memory.
@@ -64,6 +66,7 @@ rules:
6466
desc: current non-heap usage
6567
type: gauge
6668

69+
# Rule for Memory Pool metrics
6770
- bean: java.lang:type=MemoryPool,name=*
6871
type: gauge
6972
unit: By
@@ -83,9 +86,10 @@ rules:
8386
metric: jvm.memory.pool.used
8487
desc: current memory pool usage
8588

89+
# Rule for Threading metrics
8690
- bean: java.lang:type=Threading
8791
mapping:
8892
ThreadCount:
8993
metric: jvm.threads.count
9094
unit: "{thread}"
91-
desc: number of threads
95+
desc: number of threads

jmx-scraper/templates/registry/metadata/metadata.yaml.j2

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
---
2+
3+
rules:
4+
# Rule for ClassLoading metrics
5+
- bean: java.lang:type=ClassLoading
6+
mapping:
7+
LoadedClassCount:
8+
{%- set m_class_loaded = (ctx.groups | selectattr("id", "equalto", "jvm.class.loaded") | first) %}
9+
metric: jvm.classes.loaded
10+
type: gauge
11+
unit: "{{ m_class_loaded.unit | safe }}"
12+
desc: number of loaded classes
13+
14+
# Rule for Garbage Collector metrics
15+
- bean: java.lang:type=GarbageCollector,name=*
16+
mapping:
17+
{%- for m in ctx.groups if m.id in ["jvm.gc.collections.count", "jvm.gc.collections.elapsed"] -%}
18+
{%- if m.id == "jvm.gc.collections.count" %}
19+
CollectionCount:
20+
metric: {{ m.id | safe }}
21+
type: {{ m.instrument | safe }}
22+
unit: "{{ m.unit | safe }}"
23+
desc: total number of collections that have occurred
24+
metricAttribute:
25+
name: param(name)
26+
{%- elif m.id == "jvm.gc.collections.elapsed" %}
27+
CollectionTime:
28+
metric: {{ m.id | safe}}
29+
type: {{ m.instrument | safe }}
30+
unit: {{ m.unit | safe }}
31+
desc: the approximate accumulated collection elapsed time in milliseconds
32+
metricAttribute:
33+
name: param(name)
34+
{%- endif %}
35+
{%- endfor %}
36+
37+
# Rule for Heap and Non-Heap Memory metrics
38+
- bean: java.lang:type=Memory
39+
unit: By
40+
prefix: jvm.memory.
41+
mapping:
42+
{%- for m in ctx.groups if m.id.startswith("jvm.memory.heap") %}
43+
{%- if m.id == "jvm.memory.heap.committed" %}
44+
HeapMemoryUsage.committed:
45+
metric: heap.committed
46+
desc: current heap usage
47+
type: gauge
48+
{%- elif m.id == "jvm.memory.heap.init" %}
49+
HeapMemoryUsage.init:
50+
metric: heap.init
51+
desc: current heap usage
52+
type: gauge
53+
{%- elif m.id == "jvm.memory.heap.max" %}
54+
HeapMemoryUsage.max:
55+
metric: heap.max
56+
desc: current heap usage
57+
type: gauge
58+
{%- elif m.id == "jvm.memory.heap.used" %}
59+
HeapMemoryUsage.used:
60+
metric: heap.used
61+
desc: current heap usage
62+
type: gauge
63+
{%- endif %}
64+
{%- endfor %}
65+
{%- for m in ctx.groups if m.id.startswith("jvm.memory.nonheap") %}
66+
{%- if m.id == "jvm.memory.nonheap.committed" %}
67+
NonHeapMemoryUsage.committed:
68+
metric: nonheap.committed
69+
desc: current non-heap usage
70+
type: gauge
71+
{%- elif m.id == "jvm.memory.nonheap.init" %}
72+
NonHeapMemoryUsage.init:
73+
metric: nonheap.init
74+
desc: current non-heap usage
75+
type: gauge
76+
{%- elif m.id == "jvm.memory.nonheap.max" %}
77+
NonHeapMemoryUsage.max:
78+
metric: nonheap.max
79+
desc: current non-heap usage
80+
type: gauge
81+
{%- elif m.id == "jvm.memory.nonheap.used" %}
82+
NonHeapMemoryUsage.used:
83+
metric: nonheap.used
84+
desc: current non-heap usage
85+
type: gauge
86+
{%- endif %}
87+
{%- endfor %}
88+
89+
# Rule for Memory Pool metrics
90+
- bean: java.lang:type=MemoryPool,name=*
91+
type: gauge
92+
unit: By
93+
metricAttribute:
94+
name: param(name)
95+
mapping:
96+
{%- for m in ctx.groups if m.id.startswith("jvm.memory.pool") %}
97+
{%- if m.id == "jvm.memory.pool.committed" %}
98+
Usage.committed:
99+
metric: jvm.memory.pool.committed
100+
desc: current memory pool usage
101+
{%- elif m.id == "jvm.memory.pool.init" %}
102+
Usage.init:
103+
metric: jvm.memory.pool.init
104+
desc: current memory pool usage
105+
{%- elif m.id == "jvm.memory.pool.max" %}
106+
Usage.max:
107+
metric: jvm.memory.pool.max
108+
desc: current memory pool usage
109+
{%- elif m.id == "jvm.memory.pool.used" %}
110+
Usage.used:
111+
metric: jvm.memory.pool.used
112+
desc: current memory pool usage
113+
{%- endif %}
114+
{%- endfor %}
115+
116+
# Rule for Threading metrics
117+
- bean: java.lang:type=Threading
118+
mapping:
119+
ThreadCount:
120+
{%- set m_threads_count = (ctx.groups | selectattr("id", "equalto", "jvm.threads.count") | first) %}
121+
metric: {{ m_threads_count.id | safe}}
122+
unit: "{{ m_threads_count.unit | safe }}"
123+
desc: number of threads

jmx-scraper/weaver.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
templates:
2-
- pattern: metadata.yaml.j2
2+
- pattern: jvm.yaml.j2
33
filter: '.'
44
application_mode: single

0 commit comments

Comments
 (0)