Skip to content

Commit de166e5

Browse files
committed
First pass at embedding existing jmx integrations
Using copy/paste from integrations-core. Will depend on a new jmxfetch release with DataDog/jmxfetch#205 before this will work.
1 parent db425bb commit de166e5

File tree

7 files changed

+1351
-1
lines changed

7 files changed

+1351
-1
lines changed

Diff for: dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JMXFetch.java

+34-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22

33
import com.google.common.collect.ImmutableList;
44
import datadog.trace.api.Config;
5+
import java.io.IOException;
6+
import java.io.InputStream;
7+
import java.net.URL;
8+
import java.nio.charset.StandardCharsets;
9+
import java.util.ArrayList;
10+
import java.util.Collections;
511
import java.util.List;
612
import java.util.Map;
713
import lombok.extern.slf4j.Slf4j;
14+
import org.apache.commons.io.IOUtils;
815
import org.datadog.jmxfetch.App;
916
import org.datadog.jmxfetch.AppConfig;
1017

@@ -27,6 +34,7 @@ private static void run(final Config config) {
2734
return;
2835
}
2936

37+
final List<String> internalMetricsConfigs = getInternalMetricFiles();
3038
final List<String> metricsConfigs = config.getJmxFetchMetricsConfigs();
3139
final Integer checkPeriod = config.getJmxFetchCheckPeriod();
3240
final Integer refreshBeansPeriod = config.getJmxFetchRefreshBeansPeriod();
@@ -36,7 +44,8 @@ private static void run(final Config config) {
3644
final String logLevel = getLogLevel();
3745

3846
log.error(
39-
"JMXFetch config: {} {} {} {} {} {} {}",
47+
"JMXFetch config: {} {} {} {} {} {} {} {}",
48+
internalMetricsConfigs,
4049
metricsConfigs,
4150
checkPeriod,
4251
refreshBeansPeriod,
@@ -47,6 +56,7 @@ private static void run(final Config config) {
4756
final AppConfig appConfig =
4857
AppConfig.create(
4958
DEFAULT_CONFIGS,
59+
internalMetricsConfigs,
5060
metricsConfigs,
5161
checkPeriod,
5262
refreshBeansPeriod,
@@ -95,6 +105,29 @@ private static String getReporter(final Config config) {
95105
return "statsd:" + host + ":" + config.getJmxFetchStatsdPort();
96106
}
97107

108+
private static List<String> getInternalMetricFiles() {
109+
try {
110+
final InputStream metricConfigsStream =
111+
JMXFetch.class.getResourceAsStream("metricconfigs.txt");
112+
if (metricConfigsStream == null) {
113+
log.debug("metricconfigs not found. returning empty set");
114+
return Collections.emptyList();
115+
} else {
116+
final String configs = IOUtils.toString(metricConfigsStream, StandardCharsets.UTF_8);
117+
final String[] split = configs.split("\n");
118+
final List<String> result = new ArrayList<>(split.length);
119+
for (final String config : split) {
120+
final URL resource = JMXFetch.class.getResource("metricconfigs/" + config);
121+
result.add(resource.getPath().split("\\.jar!/")[1]);
122+
}
123+
return result;
124+
}
125+
} catch (final IOException e) {
126+
log.debug("error reading metricconfigs. returning empty set", e);
127+
return Collections.emptyList();
128+
}
129+
}
130+
98131
private static String getLogLocation() {
99132
return System.getProperty("org.slf4j.simpleLogger.logFile", "System.err");
100133
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
activemq.yaml
2+
cassandra.yaml
3+
kafka.yaml
4+
solr.yaml
5+
tomcat.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Default metrics collected by this check. You should not have to modify this.
2+
jmx_metrics:
3+
- include:
4+
destinationType: Queue
5+
attribute:
6+
AverageEnqueueTime:
7+
alias: activemq.queue.avg_enqueue_time
8+
metric_type: gauge
9+
ConsumerCount:
10+
alias: activemq.queue.consumer_count
11+
metric_type: gauge
12+
ProducerCount:
13+
alias: activemq.queue.producer_count
14+
metric_type: gauge
15+
MaxEnqueueTime:
16+
alias: activemq.queue.max_enqueue_time
17+
metric_type: gauge
18+
MinEnqueueTime:
19+
alias: activemq.queue.min_enqueue_time
20+
metric_type: gauge
21+
MemoryPercentUsage:
22+
alias: activemq.queue.memory_pct
23+
metric_type: gauge
24+
QueueSize:
25+
alias: activemq.queue.size
26+
metric_type: gauge
27+
DequeueCount:
28+
alias: activemq.queue.dequeue_count
29+
metric_type: counter
30+
DispatchCount:
31+
alias: activemq.queue.dispatch_count
32+
metric_type: counter
33+
EnqueueCount:
34+
alias: activemq.queue.enqueue_count
35+
metric_type: counter
36+
ExpiredCount:
37+
alias: activemq.queue.expired_count
38+
metric_type: counter
39+
InFlightCount:
40+
alias: activemq.queue.in_flight_count
41+
metric_type: counter
42+
43+
- include:
44+
type: Broker
45+
attribute:
46+
StorePercentUsage:
47+
alias: activemq.broker.store_pct
48+
metric_type: gauge
49+
TempPercentUsage:
50+
alias: activemq.broker.temp_pct
51+
metric_type: gauge
52+
MemoryPercentUsage:
53+
alias: activemq.broker.memory_pct
54+
metric_type: gauge

0 commit comments

Comments
 (0)