Skip to content

Commit 932b50f

Browse files
authored
Add custom tags to JVM metrics (#1769)
Fixes #1694 --------- Signed-off-by: Sibasis Padhi <sibasis.padhi@gmail.com>
1 parent 9592f50 commit 932b50f

12 files changed

Lines changed: 206 additions & 30 deletions

File tree

prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmBufferPoolMetrics.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.prometheus.metrics.config.PrometheusProperties;
44
import io.prometheus.metrics.core.metrics.GaugeWithCallback;
55
import io.prometheus.metrics.model.registry.PrometheusRegistry;
6+
import io.prometheus.metrics.model.snapshots.Labels;
67
import io.prometheus.metrics.model.snapshots.Unit;
78
import java.lang.management.BufferPoolMXBean;
89
import java.lang.management.ManagementFactory;
@@ -48,11 +49,13 @@ public class JvmBufferPoolMetrics {
4849

4950
private final PrometheusProperties config;
5051
private final List<BufferPoolMXBean> bufferPoolBeans;
52+
private final Labels constLabels;
5153

5254
private JvmBufferPoolMetrics(
53-
List<BufferPoolMXBean> bufferPoolBeans, PrometheusProperties config) {
55+
List<BufferPoolMXBean> bufferPoolBeans, PrometheusProperties config, Labels constLabels) {
5456
this.config = config;
5557
this.bufferPoolBeans = bufferPoolBeans;
58+
this.constLabels = constLabels;
5659
}
5760

5861
private void register(PrometheusRegistry registry) {
@@ -68,6 +71,7 @@ private void register(PrometheusRegistry registry) {
6871
callback.call(pool.getMemoryUsed(), pool.getName());
6972
}
7073
})
74+
.constLabels(constLabels)
7175
.register(registry);
7276

7377
GaugeWithCallback.builder(config)
@@ -81,6 +85,7 @@ private void register(PrometheusRegistry registry) {
8185
callback.call(pool.getTotalCapacity(), pool.getName());
8286
}
8387
})
88+
.constLabels(constLabels)
8489
.register(registry);
8590

8691
GaugeWithCallback.builder(config)
@@ -93,6 +98,7 @@ private void register(PrometheusRegistry registry) {
9398
callback.call(pool.getCount(), pool.getName());
9499
}
95100
})
101+
.constLabels(constLabels)
96102
.register(registry);
97103
}
98104

@@ -108,11 +114,17 @@ public static class Builder {
108114

109115
private final PrometheusProperties config;
110116
@Nullable private List<BufferPoolMXBean> bufferPoolBeans;
117+
private Labels constLabels = Labels.EMPTY;
111118

112119
private Builder(PrometheusProperties config) {
113120
this.config = config;
114121
}
115122

123+
public Builder constLabels(Labels constLabels) {
124+
this.constLabels = constLabels;
125+
return this;
126+
}
127+
116128
/** Package private. For testing only. */
117129
Builder bufferPoolBeans(List<BufferPoolMXBean> bufferPoolBeans) {
118130
this.bufferPoolBeans = bufferPoolBeans;
@@ -128,7 +140,7 @@ public void register(PrometheusRegistry registry) {
128140
if (bufferPoolBeans == null) {
129141
bufferPoolBeans = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
130142
}
131-
new JvmBufferPoolMetrics(bufferPoolBeans, config).register(registry);
143+
new JvmBufferPoolMetrics(bufferPoolBeans, config, constLabels).register(registry);
132144
}
133145
}
134146
}

prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmClassLoadingMetrics.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.prometheus.metrics.core.metrics.CounterWithCallback;
55
import io.prometheus.metrics.core.metrics.GaugeWithCallback;
66
import io.prometheus.metrics.model.registry.PrometheusRegistry;
7+
import io.prometheus.metrics.model.snapshots.Labels;
78
import java.lang.management.ClassLoadingMXBean;
89
import java.lang.management.ManagementFactory;
910
import javax.annotation.Nullable;
@@ -44,10 +45,13 @@ public class JvmClassLoadingMetrics {
4445

4546
private final PrometheusProperties config;
4647
private final ClassLoadingMXBean classLoadingBean;
48+
private final Labels constLabels;
4749

48-
private JvmClassLoadingMetrics(ClassLoadingMXBean classLoadingBean, PrometheusProperties config) {
50+
private JvmClassLoadingMetrics(
51+
ClassLoadingMXBean classLoadingBean, PrometheusProperties config, Labels constLabels) {
4952
this.classLoadingBean = classLoadingBean;
5053
this.config = config;
54+
this.constLabels = constLabels;
5155
}
5256

5357
private void register(PrometheusRegistry registry) {
@@ -56,13 +60,15 @@ private void register(PrometheusRegistry registry) {
5660
.name(JVM_CLASSES_CURRENTLY_LOADED)
5761
.help("The number of classes that are currently loaded in the JVM")
5862
.callback(callback -> callback.call(classLoadingBean.getLoadedClassCount()))
63+
.constLabels(constLabels)
5964
.register(registry);
6065

6166
CounterWithCallback.builder(config)
6267
.name(JVM_CLASSES_LOADED_TOTAL)
6368
.help(
6469
"The total number of classes that have been loaded since the JVM has started execution")
6570
.callback(callback -> callback.call(classLoadingBean.getTotalLoadedClassCount()))
71+
.constLabels(constLabels)
6672
.register(registry);
6773

6874
CounterWithCallback.builder(config)
@@ -71,6 +77,7 @@ private void register(PrometheusRegistry registry) {
7177
"The total number of classes that have been unloaded since the JVM has "
7278
+ "started execution")
7379
.callback(callback -> callback.call(classLoadingBean.getUnloadedClassCount()))
80+
.constLabels(constLabels)
7481
.register(registry);
7582
}
7683

@@ -86,11 +93,17 @@ public static class Builder {
8693

8794
private final PrometheusProperties config;
8895
@Nullable private ClassLoadingMXBean classLoadingBean;
96+
private Labels constLabels = Labels.EMPTY;
8997

9098
private Builder(PrometheusProperties config) {
9199
this.config = config;
92100
}
93101

102+
public Builder constLabels(Labels constLabels) {
103+
this.constLabels = constLabels;
104+
return this;
105+
}
106+
94107
/** Package private. For testing only. */
95108
Builder classLoadingBean(ClassLoadingMXBean classLoadingBean) {
96109
this.classLoadingBean = classLoadingBean;
@@ -106,7 +119,7 @@ public void register(PrometheusRegistry registry) {
106119
this.classLoadingBean != null
107120
? this.classLoadingBean
108121
: ManagementFactory.getClassLoadingMXBean();
109-
new JvmClassLoadingMetrics(classLoadingBean, config).register(registry);
122+
new JvmClassLoadingMetrics(classLoadingBean, config, constLabels).register(registry);
110123
}
111124
}
112125
}

prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmCompilationMetrics.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.prometheus.metrics.config.PrometheusProperties;
66
import io.prometheus.metrics.core.metrics.CounterWithCallback;
77
import io.prometheus.metrics.model.registry.PrometheusRegistry;
8+
import io.prometheus.metrics.model.snapshots.Labels;
89
import io.prometheus.metrics.model.snapshots.Unit;
910
import java.lang.management.CompilationMXBean;
1011
import java.lang.management.ManagementFactory;
@@ -39,10 +40,13 @@ public class JvmCompilationMetrics {
3940

4041
private final PrometheusProperties config;
4142
private final CompilationMXBean compilationBean;
43+
private final Labels constLabels;
4244

43-
private JvmCompilationMetrics(CompilationMXBean compilationBean, PrometheusProperties config) {
45+
private JvmCompilationMetrics(
46+
CompilationMXBean compilationBean, PrometheusProperties config, Labels constLabels) {
4447
this.compilationBean = compilationBean;
4548
this.config = config;
49+
this.constLabels = constLabels;
4650
}
4751

4852
private void register(PrometheusRegistry registry) {
@@ -57,6 +61,7 @@ private void register(PrometheusRegistry registry) {
5761
.unit(Unit.SECONDS)
5862
.callback(
5963
callback -> callback.call(millisToSeconds(compilationBean.getTotalCompilationTime())))
64+
.constLabels(constLabels)
6065
.register(registry);
6166
}
6267

@@ -72,11 +77,17 @@ public static class Builder {
7277

7378
private final PrometheusProperties config;
7479
@Nullable private CompilationMXBean compilationBean;
80+
private Labels constLabels = Labels.EMPTY;
7581

7682
private Builder(PrometheusProperties config) {
7783
this.config = config;
7884
}
7985

86+
public Builder constLabels(Labels constLabels) {
87+
this.constLabels = constLabels;
88+
return this;
89+
}
90+
8091
/** Package private. For testing only. */
8192
Builder compilationBean(CompilationMXBean compilationBean) {
8293
this.compilationBean = compilationBean;
@@ -92,7 +103,7 @@ public void register(PrometheusRegistry registry) {
92103
this.compilationBean != null
93104
? this.compilationBean
94105
: ManagementFactory.getCompilationMXBean();
95-
new JvmCompilationMetrics(compilationBean, config).register(registry);
106+
new JvmCompilationMetrics(compilationBean, config, constLabels).register(registry);
96107
}
97108
}
98109
}

prometheus-metrics-instrumentation-jvm/src/main/java/io/prometheus/metrics/instrumentation/jvm/JvmGarbageCollectorMetrics.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.prometheus.metrics.config.PrometheusProperties;
44
import io.prometheus.metrics.core.metrics.SummaryWithCallback;
55
import io.prometheus.metrics.model.registry.PrometheusRegistry;
6+
import io.prometheus.metrics.model.snapshots.Labels;
67
import io.prometheus.metrics.model.snapshots.Quantiles;
78
import io.prometheus.metrics.model.snapshots.Unit;
89
import java.lang.management.GarbageCollectorMXBean;
@@ -42,11 +43,15 @@ public class JvmGarbageCollectorMetrics {
4243

4344
private final PrometheusProperties config;
4445
private final List<GarbageCollectorMXBean> garbageCollectorBeans;
46+
private final Labels constLabels;
4547

4648
private JvmGarbageCollectorMetrics(
47-
List<GarbageCollectorMXBean> garbageCollectorBeans, PrometheusProperties config) {
49+
List<GarbageCollectorMXBean> garbageCollectorBeans,
50+
PrometheusProperties config,
51+
Labels constLabels) {
4852
this.config = config;
4953
this.garbageCollectorBeans = garbageCollectorBeans;
54+
this.constLabels = constLabels;
5055
}
5156

5257
private void register(PrometheusRegistry registry) {
@@ -66,6 +71,7 @@ private void register(PrometheusRegistry registry) {
6671
gc.getName());
6772
}
6873
})
74+
.constLabels(constLabels)
6975
.register(registry);
7076
}
7177

@@ -81,11 +87,17 @@ public static class Builder {
8187

8288
private final PrometheusProperties config;
8389
@Nullable private List<GarbageCollectorMXBean> garbageCollectorBeans;
90+
private Labels constLabels = Labels.EMPTY;
8491

8592
private Builder(PrometheusProperties config) {
8693
this.config = config;
8794
}
8895

96+
public Builder constLabels(Labels constLabels) {
97+
this.constLabels = constLabels;
98+
return this;
99+
}
100+
89101
/** Package private. For testing only. */
90102
Builder garbageCollectorBeans(List<GarbageCollectorMXBean> garbageCollectorBeans) {
91103
this.garbageCollectorBeans = garbageCollectorBeans;
@@ -101,7 +113,7 @@ public void register(PrometheusRegistry registry) {
101113
if (garbageCollectorBeans == null) {
102114
garbageCollectorBeans = ManagementFactory.getGarbageCollectorMXBeans();
103115
}
104-
new JvmGarbageCollectorMetrics(garbageCollectorBeans, config).register(registry);
116+
new JvmGarbageCollectorMetrics(garbageCollectorBeans, config, constLabels).register(registry);
105117
}
106118
}
107119
}

0 commit comments

Comments
 (0)