Skip to content

Commit e72bbed

Browse files
committed
[pinpoint-apm#10776] Use micrometer to collect some metrics
1 parent b3be5cd commit e72bbed

File tree

7 files changed

+164
-4
lines changed

7 files changed

+164
-4
lines changed

agent-module/agent/src/main/resources/profiles/local/pinpoint.config

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1427,4 +1427,13 @@ profiler.kotlin.coroutines.record.cancel=false
14271427
###########################################################
14281428
profiler.resilience4j.enable=true
14291429
profiler.resilience4j.trace.circuit-breaker=true
1430-
profiler.resilience4j.mark.error.circuit-breaker=false
1430+
profiler.resilience4j.mark.error.circuit-breaker=false
1431+
1432+
###########################################################
1433+
# Open telemetry metrics
1434+
###########################################################
1435+
profiler.micrometer.otlp.enabled=true
1436+
profiler.micrometer.otlp.url=http://127.0.0.1:15200/opentelemetry
1437+
profiler.micrometer.otlp.step=30s
1438+
profiler.micrometer.otlp.batchSize=50
1439+

agent-module/agent/src/main/resources/profiles/release/pinpoint.config

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1450,4 +1450,12 @@ profiler.kotlin.coroutines.record.cancel=false
14501450
###########################################################
14511451
profiler.resilience4j.enable=true
14521452
profiler.resilience4j.trace.circuit-breaker=true
1453-
profiler.resilience4j.mark.error.circuit-breaker=false
1453+
profiler.resilience4j.mark.error.circuit-breaker=false
1454+
1455+
###########################################################
1456+
# Open telemetry metrics
1457+
###########################################################
1458+
profiler.micrometer.otlp.enabled=true
1459+
profiler.micrometer.otlp.url=http://127.0.0.1:15200/opentelemetry
1460+
profiler.micrometer.otlp.step=30s
1461+
profiler.micrometer.otlp.batchSize=50

agent-module/profiler/pom.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,15 @@
162162
</exclusion>
163163
</exclusions>
164164
</dependency>-->
165-
166165
<dependency>
167166
<groupId>org.mapstruct</groupId>
168167
<artifactId>mapstruct</artifactId>
169168
</dependency>
169+
<dependency>
170+
<groupId>io.micrometer</groupId>
171+
<artifactId>micrometer-registry-otlp</artifactId>
172+
<version>1.9.2</version>
173+
</dependency>
170174
</dependencies>
171175

172176
<build>

agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/monitor/config/DefaultMonitorConfig.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package com.navercorp.pinpoint.profiler.context.monitor.config;
1818

1919
import com.navercorp.pinpoint.common.config.Value;
20-
20+
import com.navercorp.pinpoint.common.util.StringUtils;
2121
public class DefaultMonitorConfig implements MonitorConfig {
2222

2323
public static final int DEFAULT_AGENT_STAT_COLLECTION_INTERVAL_MS = 5 * 1000;
@@ -49,6 +49,50 @@ public class DefaultMonitorConfig implements MonitorConfig {
4949
@Value("${profiler.jvm.stat.collect.detailed.metrics}")
5050
private boolean profilerJvmStatCollectDetailedMetrics = false;
5151

52+
@Value("${profiler.micrometer.otlp.enabled}")
53+
private boolean micrometerEnable = false;
54+
55+
@Value("${profiler.micrometer.otlp.url}")
56+
private String micrometerUrl;
57+
58+
@Value("${profiler.micrometer.otlp.step}")
59+
private String micrometerStep;
60+
61+
@Value("${profiler.micrometer.otlp.batchSize}")
62+
private String micrometerBatchSize;
63+
64+
@Value("${pinpoint.applicationName}")
65+
private String applicationName;
66+
67+
@Value("${pinpoint.agentId}")
68+
private String agentId;
69+
70+
public DefaultMonitorConfig() {
71+
if (StringUtils.isEmpty(agentId)) {
72+
agentId = System.getProperty("pinpoint.agentId");
73+
}
74+
if (StringUtils.isEmpty(applicationName)) {
75+
applicationName = System.getProperty("pinpoint.applicationName");
76+
}
77+
}
78+
79+
@Override
80+
public boolean isMicrometerEnable() { return micrometerEnable; }
81+
82+
@Override
83+
public String getMicrometerUrl() { return micrometerUrl; }
84+
85+
@Override
86+
public String getMicrometerStep() { return micrometerStep; }
87+
88+
@Override
89+
public String getMicrometerBatchSize() { return micrometerBatchSize; }
90+
91+
@Override
92+
public String getApplicationName() { return applicationName; }
93+
94+
public String getAgentId() { return agentId;}
95+
5296
@Override
5397
public int getProfileJvmStatCollectIntervalMs() {
5498
return profileJvmStatCollectIntervalMs;
@@ -118,6 +162,12 @@ public String toString() {
118162
", profileJvmStatCollectIntervalMs=" + profileJvmStatCollectIntervalMs +
119163
", profileJvmStatBatchSendCount=" + profileJvmStatBatchSendCount +
120164
", profilerJvmStatCollectDetailedMetrics=" + profilerJvmStatCollectDetailedMetrics +
165+
", micrometerEnable=" + micrometerEnable +
166+
", micrometerUrl=" + micrometerUrl +
167+
", micrometerStep=" + micrometerStep +
168+
", micrometerBatchSize=" + micrometerBatchSize +
169+
", micrometerHostName=" + agentId +
170+
", micrometerHostGroupName=" + applicationName +
121171
'}';
122172
}
123173
}

agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/monitor/config/MonitorConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,16 @@ public interface MonitorConfig {
3939

4040
int getCompletedUriStatDataLimitSize();
4141

42+
boolean isMicrometerEnable();
43+
44+
String getMicrometerUrl();
45+
46+
String getMicrometerStep();
47+
48+
String getMicrometerBatchSize();
49+
50+
String getApplicationName();
51+
52+
String getAgentId();
53+
4254
}

agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/DefaultAgentStatMonitor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector;
3333
import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot;
3434
import com.navercorp.pinpoint.profiler.monitor.metric.MetricType;
35+
import com.navercorp.pinpoint.profiler.monitor.micrometer.MicrometerCollectingJob;
3536
import org.apache.logging.log4j.LogManager;
3637
import org.apache.logging.log4j.Logger;
3738

@@ -104,6 +105,11 @@ public DefaultAgentStatMonitor(@StatDataSender DataSender<MetricType> dataSender
104105
runnableList.add(uriStatCollectingJob);
105106
}
106107

108+
if (monitorConfig.isMicrometerEnable()) {
109+
new MicrometerCollectingJob(monitorConfig.getMicrometerUrl(), monitorConfig.getMicrometerStep(),
110+
monitorConfig.getMicrometerBatchSize(), monitorConfig.getApplicationName(), monitorConfig.getAgentId());
111+
}
112+
107113
this.statMonitorJob = new StatMonitorJob(runnableList);
108114

109115
preLoadClass(agentId, agentStartTimestamp, agentStatCollector);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright 2017 NAVER Corp.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.navercorp.pinpoint.profiler.monitor.micrometer;
18+
19+
import io.micrometer.core.instrument.Clock;
20+
import io.micrometer.core.instrument.binder.jvm.*;
21+
import io.micrometer.core.instrument.binder.system.DiskSpaceMetrics;
22+
import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics;
23+
import io.micrometer.core.instrument.binder.system.ProcessorMetrics;
24+
import io.micrometer.core.instrument.binder.system.UptimeMetrics;
25+
import io.micrometer.registry.otlp.OtlpConfig;
26+
import io.micrometer.registry.otlp.OtlpMeterRegistry;
27+
import org.apache.logging.log4j.LogManager;
28+
import org.apache.logging.log4j.Logger;
29+
30+
import java.io.File;
31+
import java.util.Properties;
32+
33+
public class MicrometerCollectingJob {
34+
35+
private final Logger logger = LogManager.getLogger(this.getClass());
36+
37+
private final OtlpMeterRegistry meterRegistry;
38+
39+
public MicrometerCollectingJob(String micrometerUrl, String micrometerStep, String micrometerBatchSize, String applicationName, String agentId) {
40+
this.meterRegistry = new OtlpMeterRegistry(getOtlpConfig(micrometerUrl, micrometerStep, micrometerBatchSize, "", applicationName, agentId), Clock.SYSTEM);
41+
bindMetrics();
42+
}
43+
44+
private void bindMetrics() {
45+
// jvm
46+
new ClassLoaderMetrics().bindTo(meterRegistry);
47+
new JvmCompilationMetrics().bindTo(meterRegistry);
48+
new JvmGcMetrics().bindTo(meterRegistry);
49+
new JvmHeapPressureMetrics().bindTo(meterRegistry);
50+
new JvmInfoMetrics().bindTo(meterRegistry);
51+
new JvmMemoryMetrics().bindTo(meterRegistry);
52+
new JvmThreadMetrics().bindTo(meterRegistry);
53+
54+
// system
55+
new DiskSpaceMetrics(new File("/")).bindTo(meterRegistry); // add other paths with user input?
56+
new FileDescriptorMetrics().bindTo(meterRegistry);
57+
new ProcessorMetrics().bindTo(meterRegistry);
58+
new UptimeMetrics().bindTo(meterRegistry);
59+
}
60+
61+
private OtlpConfig getOtlpConfig(String micrometerUrl, String micrometerStep, String micrometerBatchSize,
62+
String serviceName, String applicationName, String agentId) {
63+
Properties propertiesConfig = new Properties();
64+
propertiesConfig.put("otlp.url", micrometerUrl);
65+
propertiesConfig.put("otlp.step", String.valueOf(micrometerStep));
66+
propertiesConfig.put("otlp.batchSize", String.valueOf(micrometerBatchSize));
67+
propertiesConfig.put("otlp.resourceAttributes", "service.namespace=" + serviceName + ",service.name=" + applicationName + ",pinpoint.agentId=" + agentId);
68+
OtlpConfig otlpConfig = (key -> (String) propertiesConfig.get(key));
69+
return otlpConfig;
70+
}
71+
}

0 commit comments

Comments
 (0)