Skip to content

Commit 8fd18fb

Browse files
committed
Update to latest opentelemetry-auto-instr-java
1 parent 1f8821c commit 8fd18fb

File tree

10 files changed

+65
-9
lines changed

10 files changed

+65
-9
lines changed

agent/agent-bootstrap/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ task generateVersionProperties(type: PropsFileGen) {
2424
processResources.dependsOn generateVersionProperties
2525

2626
dependencies {
27-
compile (group: 'io.opentelemetry.auto', name: 'auto-bootstrap', version: '0.1.2-SNAPSHOT') {
27+
compile (group: 'io.opentelemetry.auto', name: 'auto-bootstrap', version: '0.2.1-SNAPSHOT') {
2828
exclude group: 'org.slf4j', module: 'slf4j-simple'
2929
}
3030
compile 'ch.qos.logback:logback-classic:1.2.3'

agent/agent-tooling/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ dependencies {
3737

3838
compile 'com.google.guava:guava:27.1-android'
3939

40-
compile 'io.opentelemetry.auto:auto-tooling:0.1.2-SNAPSHOT'
40+
compile 'io.opentelemetry.auto:auto-tooling:0.2.1-SNAPSHOT'
4141
compile 'org.checkerframework:checker-qual-android:3.1.0'
4242

4343
compile(project(':core')) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.microsoft.applicationinsights.agent.internal;
2+
3+
import com.microsoft.applicationinsights.TelemetryConfiguration;
4+
import com.microsoft.applicationinsights.web.internal.correlation.InstrumentationKeyResolver;
5+
import io.opentelemetry.auto.bootstrap.instrumentation.aiappid.AiAppId;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
public class AppIdSupplier implements AiAppId.Supplier {
10+
11+
private static final Logger logger = LoggerFactory.getLogger(AppIdSupplier.class);
12+
13+
public String get() {
14+
String instrumentationKey = TelemetryConfiguration.getActive().getInstrumentationKey();
15+
String appId = InstrumentationKeyResolver.INSTANCE.resolveInstrumentationKey(instrumentationKey, TelemetryConfiguration.getActive());
16+
17+
//it's possible the appId returned is null (e.g. async task is still pending or has failed). In this case, just
18+
//return and let the next request resolve the ikey.
19+
if (appId == null) {
20+
logger.debug("Application correlation Id could not be retrieved (e.g. task may be pending or failed)");
21+
return "";
22+
}
23+
return appId;
24+
}
25+
}

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/BeforeAgentInstaller.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.microsoft.applicationinsights.internal.config.TelemetryModulesXmlElement;
5656
import com.microsoft.applicationinsights.internal.system.SystemInformation;
5757
import com.microsoft.applicationinsights.internal.util.PropertyHelper;
58+
import io.opentelemetry.auto.bootstrap.instrumentation.aiappid.AiAppId;
5859
import io.opentelemetry.auto.config.Config;
5960
import io.opentelemetry.auto.config.ConfigOverride;
6061
import org.apache.http.HttpHost;
@@ -141,6 +142,7 @@ private static void start(Instrumentation instrumentation, File agentJarFile) th
141142
}
142143
TelemetryClient telemetryClient = new TelemetryClient();
143144
Global.setTelemetryClient(telemetryClient);
145+
AiAppId.setSupplier(new AppIdSupplier());
144146
}
145147

146148
@Nullable

agent/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.microsoft.applicationinsights.agent.Exporter;
55
import com.microsoft.applicationinsights.agent.internal.Global;
66
import com.microsoft.applicationinsights.agent.internal.sampling.FixedRateSampler;
7+
import io.opentelemetry.OpenTelemetry;
8+
import io.opentelemetry.auto.bootstrap.instrumentation.aiappid.AiHttpTraceContext;
9+
import io.opentelemetry.context.propagation.DefaultContextPropagators;
710
import io.opentelemetry.sdk.OpenTelemetrySdk;
811
import io.opentelemetry.sdk.trace.config.TraceConfig;
912
import io.opentelemetry.sdk.trace.export.SimpleSpansProcessor;
@@ -16,6 +19,10 @@ public static void installAgentTracer() {
1619
// agent failed during startup
1720
return;
1821
}
22+
23+
OpenTelemetry.setPropagators(
24+
DefaultContextPropagators.builder().addHttpTextFormat(new AiHttpTraceContext()).build());
25+
1926
double fixedRateSamplingPercentage = Global.getFixedRateSamplingPercentage();
2027
if (fixedRateSamplingPercentage != 100) {
2128
OpenTelemetrySdk.getTracerProvider().updateActiveTraceConfig(

agent/agent/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ shadowJar {
6767
relocate "io.opentelemetry.common", "io.opentelemetry.auto.shaded.io.opentelemetry.common"
6868
relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context"
6969
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.correlationcontext"
70-
relocate "io.opentelemetry.distributedcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.distributedcontext"
7170
relocate "io.opentelemetry.internal", "io.opentelemetry.auto.shaded.io.opentelemetry.internal"
7271
relocate "io.opentelemetry.metrics", "io.opentelemetry.auto.shaded.io.opentelemetry.metrics"
7372
relocate "io.opentelemetry.trace", "io.opentelemetry.auto.shaded.io.opentelemetry.trace"

agent/exporter/build.gradle

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@ plugins {
44

55
apply from: "$buildScriptsDir/common-java.gradle"
66

7+
repositories {
8+
mavenLocal()
9+
}
10+
711
dependencies {
8-
compile 'io.opentelemetry:opentelemetry-sdk:0.2.4'
12+
compile 'io.opentelemetry:opentelemetry-sdk:0.3.0'
13+
14+
// this is needed in order to access AiAppId in auto-bootstrap for appId exchange data
15+
compileOnly 'io.opentelemetry.auto:auto-bootstrap:0.2.1-SNAPSHOT'
916

1017
compile 'org.slf4j:slf4j-api:1.7.26'
1118

agent/exporter/src/main/java/com/microsoft/applicationinsights/agent/Exporter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.net.URI;
2424
import java.net.URISyntaxException;
2525
import java.text.SimpleDateFormat;
26+
import java.util.Collection;
2627
import java.util.Date;
2728
import java.util.List;
2829
import java.util.Locale;
@@ -40,6 +41,7 @@
4041
import com.microsoft.applicationinsights.telemetry.SupportSampling;
4142
import com.microsoft.applicationinsights.telemetry.Telemetry;
4243
import com.microsoft.applicationinsights.telemetry.TraceTelemetry;
44+
import io.opentelemetry.auto.bootstrap.instrumentation.aiappid.AiAppId;
4345
import io.opentelemetry.common.AttributeValue;
4446
import io.opentelemetry.common.AttributeValue.Type;
4547
import io.opentelemetry.sdk.trace.data.SpanData;
@@ -67,7 +69,7 @@ public Exporter(TelemetryClient telemetryClient) {
6769
}
6870

6971
@Override
70-
public ResultCode export(List<SpanData> spans) {
72+
public ResultCode export(Collection<SpanData> spans) {
7173
try {
7274
for (SpanData span : spans) {
7375
logger.debug("exporting span: {}", span);
@@ -116,6 +118,11 @@ private void exportRequest(SpanData span) {
116118

117119
RequestTelemetry telemetry = new RequestTelemetry();
118120

121+
String sourceAppId = getString(span, AiAppId.SPAN_SOURCE_ATTRIBUTE_NAME);
122+
if (!AiAppId.getAppId().equals(sourceAppId)) {
123+
telemetry.setSource(sourceAppId);
124+
}
125+
119126
addLinks(telemetry.getProperties(), span.getLinks());
120127

121128
AttributeValue httpStatusCode = span.getAttributes().get("http.status_code");
@@ -314,7 +321,12 @@ private void applyHttpRequestSpan(SpanData span, RemoteDependencyTelemetry telem
314321
try {
315322
URI uriObject = new URI(url);
316323
String target = createTarget(uriObject);
317-
telemetry.setTarget(target);
324+
String targetAppId = getString(span, AiAppId.SPAN_TARGET_ATTRIBUTE_NAME);
325+
if (targetAppId == null || AiAppId.getAppId().equals(targetAppId)) {
326+
telemetry.setTarget(target);
327+
} else {
328+
telemetry.setTarget(target + " | " + targetAppId);
329+
}
318330
// TODO is this right, overwriting name to include the full path?
319331
String path = uriObject.getPath();
320332
if (Strings.isNullOrEmpty(path)) {

agent/instrumentation/build.gradle

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repositories {
88
mavenLocal()
99
}
1010

11-
def instrumentationVersion = '0.1.2-SNAPSHOT'
11+
def instrumentationVersion = '0.2.1-SNAPSHOT'
1212

1313
dependencies {
1414
compile project(':agent:agent-tooling')
@@ -44,6 +44,7 @@ dependencies {
4444
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-okhttp-3.0', version: instrumentationVersion
4545
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-opentelemetry-api-0.2.0', version: instrumentationVersion
4646
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-opentelemetry-api-0.2.4', version: instrumentationVersion
47+
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-opentelemetry-api-0.3', version: instrumentationVersion
4748
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-request-2.3', version: instrumentationVersion
4849
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-request-3.0', version: instrumentationVersion
4950
compile group: 'io.opentelemetry.auto.instrumentation', name: 'instrumentation-spring-scheduling-3.1', version: instrumentationVersion
@@ -110,13 +111,16 @@ shadowJar {
110111
relocate "io.opentelemetry.common", "io.opentelemetry.auto.shaded.io.opentelemetry.common"
111112
relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context"
112113
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.correlationcontext"
113-
relocate "io.opentelemetry.distributedcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.distributedcontext"
114114
relocate "io.opentelemetry.internal", "io.opentelemetry.auto.shaded.io.opentelemetry.internal"
115115
relocate "io.opentelemetry.metrics", "io.opentelemetry.auto.shaded.io.opentelemetry.metrics"
116116
relocate "io.opentelemetry.trace", "io.opentelemetry.auto.shaded.io.opentelemetry.trace"
117117

118+
// relocate OpenTelemetry API dependency usage
119+
relocate "io.grpc.Context", "io.opentelemetry.auto.shaded.io.grpc.Context"
120+
118121
// this is for instrumentation on opentelemetry-api itself
119122
relocate "unshaded.io.opentelemetry", "io.opentelemetry"
123+
relocate "unshaded.io.grpc", "io.grpc"
120124

121125
// this is for instrumentation on logback
122126
relocate "unshaded.ch.qos.logback", "ch.qos.logback"

opentelemetry-auto-instr-java

0 commit comments

Comments
 (0)