Skip to content

Commit b3c7600

Browse files
PerfectSlayerbric3
andauthored
Extract metrics from communication (#10399)
* feat(metrics): Try to extract metrics from communication * fix(ot): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(comm): Simplify url resolution * feat(metrics): Remove version file * feat(metrics): Try to extract metrics from communication * fix(metrics): Fix StatsD client manager start * fix(metrics): Fix new jar name * fix(metrics): Fix tests * fix(metrics): Move to non generic module names * feat(metrics): Try to extract metrics from communication * fix(metrics): Fix tests * fix(metrics): Try to extract metrics from communication * fix(metrics): Try to extract metrics from communication * fix(metrics): Fix tests * fix(metrics): Fix JMXFetch native resources * fix(metrics): Fix meter initialization in native mode * fix(metrics): Fix metrics API in bootstrap for instrumentations * fix(metrics): Create dedicated product folder * feat(metrics): Introduce better histogram API * feat(metrics): Add metrics to ignored classes * fix(metrics): Remove duplicate class loading * fix: Make metrics-lib land correctly in the tracer jar * fix: Move sketches-java to shared and fix dd-trace-core compilation * Also fixes the muzzle checks * Remove the need to exclude sketches-java when declaring metrics-lib * fix: Duplicate classes in metrics/ * fix: Agent jar structure * fix: Boostrap classloader issue, metrics-api and metrics-lib classes had same package * fix: Move statsd package under api and impl * fix(metrics): Fix statsd package from api module * fix(metrics): Use explicit DDSketchHistograms initialization and improve API * fix(metrics): Fix test initialization * feat(metrics): Simplify meter installation * fix(metrics): Try not forcing metric config Co-authored-by: Brice Dutheil <brice.dutheil@gmail.com>
1 parent ec3e7d8 commit b3c7600

111 files changed

Lines changed: 763 additions & 530 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

communication/build.gradle.kts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ dependencies {
2020
api(libs.okio)
2121
api(libs.okhttp)
2222
api(libs.moshi)
23-
implementation(libs.dogstatsd)
23+
// metrics-lib is needed rather than metrics-api to change the default port of StatsD connection manager
24+
// TODO Could help decoupling it later to only depend on metrics-api
25+
implementation(project(":products:metrics:metrics-lib"))
2426

2527
testImplementation(project(":utils:test-utils"))
2628
testImplementation(libs.bundles.junit5)
@@ -49,9 +51,6 @@ val excludedClassesCoverage by extra(
4951
"datadog.communication.http.OkHttpUtils.GZipByteBufferRequestBody",
5052
"datadog.communication.http.OkHttpUtils.GZipRequestBodyDecorator",
5153
"datadog.communication.http.OkHttpUtils.JsonRequestBody",
52-
"datadog.communication.monitor.DDAgentStatsDConnection",
53-
"datadog.communication.monitor.DDAgentStatsDConnection.*",
54-
"datadog.communication.monitor.LoggingStatsDClient",
5554
"datadog.communication.BackendApiFactory",
5655
"datadog.communication.BackendApiFactory.Intake",
5756
"datadog.communication.EvpProxyApi",

communication/src/main/java/datadog/communication/EvpProxyApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public EvpProxyApi(
4242
OkHttpClient httpClient,
4343
boolean responseCompression) {
4444
this.traceId = traceId;
45-
this.evpProxyUrl = evpProxyUrl.resolve(String.format("api/%s/", API_VERSION));
45+
this.evpProxyUrl = evpProxyUrl.resolve("api/" + API_VERSION + "/");
4646
this.subdomain = subdomain;
4747
this.retryPolicyFactory = retryPolicyFactory;
4848
this.httpClient = httpClient;

communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import com.squareup.moshi.Types;
1313
import datadog.common.container.ContainerInfo;
1414
import datadog.communication.http.OkHttpUtils;
15-
import datadog.communication.monitor.DDAgentStatsDClientManager;
16-
import datadog.communication.monitor.Monitoring;
17-
import datadog.communication.monitor.Recording;
15+
import datadog.metrics.api.Monitoring;
16+
import datadog.metrics.api.Recording;
17+
import datadog.metrics.impl.statsd.DDAgentStatsDClientManager;
1818
import datadog.trace.api.BaseHash;
1919
import datadog.trace.api.telemetry.LogCollector;
2020
import datadog.trace.util.Strings;

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import datadog.common.container.ContainerInfo;
77
import datadog.common.socket.SocketUtils;
88
import datadog.communication.http.OkHttpUtils;
9-
import datadog.communication.monitor.Monitoring;
9+
import datadog.metrics.api.Monitoring;
1010
import datadog.remoteconfig.ConfigurationPoller;
1111
import datadog.remoteconfig.DefaultConfigurationPoller;
1212
import datadog.trace.api.Config;

communication/src/main/java/datadog/communication/monitor/Monitoring.java

Lines changed: 0 additions & 37 deletions
This file was deleted.

communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.communication.ddagent
22

33
import datadog.common.container.ContainerInfo
4-
import datadog.communication.monitor.Monitoring
4+
import datadog.metrics.api.Monitoring
55
import datadog.trace.test.util.DDSpecification
66
import datadog.trace.util.Strings
77
import okhttp3.Call

communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.communication.ddagent
22

3-
import datadog.communication.monitor.Monitoring
3+
import datadog.metrics.api.Monitoring
44
import datadog.trace.api.Config
55
import datadog.trace.test.util.DDSpecification
66
import okhttp3.HttpUrl

dd-java-agent/agent-bootstrap/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies {
2323
api project(':dd-java-agent:agent-debugger:debugger-bootstrap')
2424
api project(':components:environment')
2525
api project(':components:json')
26+
api project(':products:metrics:metrics-agent')
2627
api libs.instrument.java
2728
api libs.slf4j
2829
// ^ Generally a bad idea for libraries, but we're shadowing.

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import datadog.environment.SystemProperties;
2424
import datadog.instrument.classinject.ClassInjector;
2525
import datadog.instrument.utils.ClassLoaderValue;
26+
import datadog.metrics.api.statsd.StatsDClientManager;
2627
import datadog.trace.api.Config;
2728
import datadog.trace.api.Platform;
28-
import datadog.trace.api.StatsDClientManager;
2929
import datadog.trace.api.WithGlobalTracer;
3030
import datadog.trace.api.appsec.AppSecEventTracker;
3131
import datadog.trace.api.config.AppSecConfig;
@@ -663,6 +663,7 @@ public InstallDatadogTracerCallback(
663663
throw new UndeclaredThrowableException(e);
664664
}
665665

666+
installDatadogMeter(initTelemetry);
666667
installDatadogTracer(initTelemetry, scoClass, sco);
667668
maybeInstallLogsIntake(scoClass, sco);
668669
maybeStartIast(instrumentation);
@@ -795,6 +796,29 @@ private static synchronized void startDatadogAgent(
795796
}
796797
}
797798

799+
private static synchronized void installDatadogMeter(InitializationTelemetry initTelemetry) {
800+
if (AGENT_CLASSLOADER == null) {
801+
throw new IllegalStateException("Datadog agent should have been started already");
802+
}
803+
804+
StaticEventLogger.begin("AgentMeter");
805+
806+
try {
807+
// Install AgentMeter, StatsDClient and Monitoring
808+
final Class<?> tracerInstallerClass =
809+
AGENT_CLASSLOADER.loadClass("datadog.trace.agent.tooling.MeterInstaller");
810+
final Method installMeterMethod = tracerInstallerClass.getMethod("installMeter");
811+
installMeterMethod.invoke(null);
812+
} catch (final FatalAgentMisconfigurationError ex) {
813+
throw ex;
814+
} catch (final Throwable ex) {
815+
log.error("Throwable thrown while installing the Datadog meter", ex);
816+
initTelemetry.onFatalError(ex);
817+
}
818+
819+
StaticEventLogger.end("AgentMeter");
820+
}
821+
798822
private static synchronized void installDatadogTracer(
799823
InitializationTelemetry initTelemetry, Class<?> scoClass, Object sco) {
800824
if (AGENT_CLASSLOADER == null) {
@@ -982,7 +1006,7 @@ private static synchronized void startJmxFetch() {
9821006

9831007
private static StatsDClientManager statsDClientManager() throws Exception {
9841008
final Class<?> statsdClientManagerClass =
985-
AGENT_CLASSLOADER.loadClass("datadog.communication.monitor.DDAgentStatsDClientManager");
1009+
AGENT_CLASSLOADER.loadClass("datadog.metrics.impl.statsd.DDAgentStatsDClientManager");
9861010
final Method statsDClientManagerMethod =
9871011
statsdClientManagerClass.getMethod("statsDClientManager");
9881012
return (StatsDClientManager) statsDClientManagerMethod.invoke(null);

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public final class Constants {
2121
"datadog.yaml",
2222
"datadog.instrument",
2323
"datadog.appsec.api",
24+
"datadog.metrics.api",
2425
"datadog.trace.api",
2526
"datadog.trace.bootstrap",
2627
"datadog.trace.config.inversion",

0 commit comments

Comments
 (0)