Skip to content

Commit 8fb540b

Browse files
authored
Upgrade to OTEL 0.13.0 (hypertrace#185)
* Upgrade to OTEL 0.13.0 Signed-off-by: Pavol Loffay <[email protected]> * move opa to agent classloader Signed-off-by: Pavol Loffay <[email protected]>
1 parent 18ed548 commit 8fb540b

File tree

16 files changed

+181
-100
lines changed

16 files changed

+181
-100
lines changed

CONTRIBUTING.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Contributing
2+
3+
## Upgrade OpenTelemetry auto instrumentation
4+
5+
To upgrade OpenTelemetry auto instrumentation (agent) follow these steps:
6+
7+
1. Upgrade OpenTelemetry API and agent versions in [build.gradle.kts](./build.gradle.kts).
8+
The OpenTelemetry API version has to match the version used by the agent.
9+
2. Make sure shadow replace configuration from [build.gradle.kts](./build.gradle.kts) and [./instrumentation/build.gradle.kts](./instrumentation/build.gradle.kts)
10+
is aligned with https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/5ef915879162bcccd0f3727d25bb735816263188/javaagent/javaagent.gradle#L83-L95
11+
and https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/5ef915879162bcccd0f3727d25bb735816263188/instrumentation/instrumentation.gradle#L66-L76
12+
3. Make sure (./buildSrc) is synced with https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/master/buildSrc.
13+
It should be one to one copy.
14+
4. Make sure Hypertrace instrumentation names match with OpenTelemetry instrumentation names.

build.gradle.kts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ subprojects {
2828
description = "Hypertrace OpenTelemetry Javaagent"
2929

3030
extra.set("versions", mapOf(
31-
"opentelemetry" to "0.12.0",
32-
"opentelemetry_java_agent" to "0.12.1",
31+
"opentelemetry" to "0.13.1",
32+
"opentelemetry_java_agent" to "0.13.0",
3333
"byte_buddy" to "1.10.18"
3434
))
3535

buildSrc/build.gradle.kts

+27-27
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
plugins {
2-
groovy
3-
`java-gradle-plugin`
4-
id("com.diffplug.gradle.spotless") version "4.3.0"
2+
groovy
3+
`java-gradle-plugin`
4+
id("com.diffplug.gradle.spotless") version "4.3.0"
55
}
66

77
gradlePlugin {
8-
plugins {
9-
create("muzzle-plugin") {
10-
id = "muzzle"
11-
implementationClass = "MuzzlePlugin"
12-
}
13-
create("auto-instrumentation-plugin") {
14-
id = "io.opentelemetry.instrumentation.auto-instrumentation"
15-
implementationClass = "io.opentelemetry.instrumentation.gradle.AutoInstrumentationPlugin"
16-
}
8+
plugins {
9+
create("muzzle-plugin") {
10+
id = "muzzle"
11+
implementationClass = "MuzzlePlugin"
1712
}
13+
create("auto-instrumentation-plugin") {
14+
id = "io.opentelemetry.instrumentation.auto-instrumentation"
15+
implementationClass = "io.opentelemetry.instrumentation.gradle.AutoInstrumentationPlugin"
16+
}
17+
}
1818
}
1919

2020
repositories {
21-
mavenLocal()
22-
jcenter()
23-
mavenCentral()
21+
mavenLocal()
22+
jcenter()
23+
mavenCentral()
2424
}
2525

2626
dependencies {
27-
implementation(gradleApi())
28-
implementation(localGroovy())
27+
implementation(gradleApi())
28+
implementation(localGroovy())
2929

30-
implementation("org.eclipse.aether", "aether-connector-basic", "1.1.0")
31-
implementation("org.eclipse.aether", "aether-transport-http", "1.1.0")
32-
implementation("org.apache.maven", "maven-aether-provider", "3.3.9")
30+
implementation("org.eclipse.aether", "aether-connector-basic", "1.1.0")
31+
implementation("org.eclipse.aether", "aether-transport-http", "1.1.0")
32+
implementation("org.apache.maven", "maven-aether-provider", "3.3.9")
3333

34-
implementation("com.google.guava", "guava", "20.0")
35-
implementation("org.ow2.asm", "asm", "7.0-beta")
36-
implementation("org.ow2.asm", "asm-tree", "7.0-beta")
37-
implementation("org.apache.httpcomponents:httpclient:4.5.10")
38-
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.10.18")
34+
implementation("com.google.guava", "guava", "20.0")
35+
implementation("org.ow2.asm", "asm", "7.0-beta")
36+
implementation("org.ow2.asm", "asm-tree", "7.0-beta")
37+
implementation("org.apache.httpcomponents:httpclient:4.5.10")
38+
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.10.18")
3939

40-
testImplementation("org.spockframework", "spock-core", "1.3-groovy-2.5")
41-
testImplementation("org.codehaus.groovy", "groovy-all", "2.5.8")
40+
testImplementation("org.spockframework", "spock-core", "1.3-groovy-2.5")
41+
testImplementation("org.codehaus.groovy", "groovy-all", "2.5.8")
4242
}

buildSrc/src/main/groovy/MuzzlePlugin.groovy

+14-14
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class MuzzlePlugin implements Plugin<Project> {
7676
ClassLoader userCL = createCompileDepsClassLoader(project, bootstrapProject)
7777
ClassLoader instrumentationCL = createInstrumentationClassloader(project, toolingProject)
7878
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.tooling.muzzle.matcher.MuzzleGradlePluginUtil')
79-
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
79+
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
8080
assertionMethod.invoke(null, instrumentationCL, userCL, true)
8181
}
8282
println "Muzzle executing for $project"
@@ -88,7 +88,7 @@ class MuzzlePlugin implements Plugin<Project> {
8888
doLast {
8989
ClassLoader instrumentationCL = createInstrumentationClassloader(project, toolingProject)
9090
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.tooling.muzzle.matcher.MuzzleGradlePluginUtil')
91-
.getMethod('printMuzzleReferences', ClassLoader.class)
91+
.getMethod('printMuzzleReferences', ClassLoader.class)
9292
assertionMethod.invoke(null, instrumentationCL)
9393
}
9494
}
@@ -311,17 +311,17 @@ class MuzzlePlugin implements Plugin<Project> {
311311
}
312312

313313
def draftVersion = versionString.contains("rc") ||
314-
versionString.contains(".cr") ||
315-
versionString.contains("alpha") ||
316-
versionString.contains("beta") ||
317-
versionString.contains("-b") ||
318-
versionString.contains(".m") ||
319-
versionString.contains("-m") ||
320-
versionString.contains("-dev") ||
321-
versionString.contains("-ea") ||
322-
versionString.contains("-atlassian-") ||
323-
versionString.contains("public_draft") ||
324-
versionString.matches(GIT_SHA_PATTERN)
314+
versionString.contains(".cr") ||
315+
versionString.contains("alpha") ||
316+
versionString.contains("beta") ||
317+
versionString.contains("-b") ||
318+
versionString.contains(".m") ||
319+
versionString.contains("-m") ||
320+
versionString.contains("-dev") ||
321+
versionString.contains("-ea") ||
322+
versionString.contains("-atlassian-") ||
323+
versionString.contains("public_draft") ||
324+
versionString.matches(GIT_SHA_PATTERN)
325325

326326
return !draftVersion
327327
}
@@ -382,7 +382,7 @@ class MuzzlePlugin implements Plugin<Project> {
382382
try {
383383
// find all instrumenters, get muzzle, and assert
384384
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.tooling.muzzle.matcher.MuzzleGradlePluginUtil')
385-
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
385+
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
386386
assertionMethod.invoke(null, instrumentationCL, userCL, muzzleDirective.assertPass)
387387
} finally {
388388
Thread.currentThread().contextClassLoader = ccl

buildSrc/src/main/java/io/opentelemetry/instrumentation/gradle/bytebuddy/ByteBuddyPluginConfigurator.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.gradle.bytebuddy;
77

8+
import com.google.common.collect.ImmutableList;
89
import java.io.File;
910
import java.util.Arrays;
1011
import java.util.List;
@@ -46,7 +47,16 @@ public ByteBuddyPluginConfigurator(
4647
this.project = project;
4748
this.sourceSet = sourceSet;
4849
this.pluginClassName = pluginClassName;
49-
this.inputClasspath = inputClasspath;
50+
51+
// add build resources dir to classpath if it's present
52+
File resourcesDir = sourceSet.getOutput().getResourcesDir();
53+
this.inputClasspath =
54+
resourcesDir == null
55+
? inputClasspath
56+
: ImmutableList.<File>builder()
57+
.addAll(inputClasspath)
58+
.add(sourceSet.getOutput().getResourcesDir())
59+
.build();
5060
}
5161

5262
public void configure() {
@@ -58,6 +68,8 @@ public void configure() {
5868

5969
if (compile != null) {
6070
Task languageTask = createLanguageTask(compile, taskName + language);
71+
// We also process resources for SPI classes.
72+
languageTask.dependsOn(sourceSet.getProcessResourcesTaskName());
6173
byteBuddyTask.dependsOn(languageTask);
6274
}
6375
}

filter-custom-opa/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
dependencies {
6-
implementation(project(":filter-api"))
6+
api(project(":filter-api"))
77
implementation("org.slf4j:slf4j-api:1.7.30")
88
implementation("com.squareup.okhttp3:okhttp:3.14.9")
99
implementation("com.fasterxml.jackson.core:jackson-databind:2.11.3")

instrumentation/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,6 @@ tasks {
7676
relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api")
7777
relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi")
7878
relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context")
79+
relocate ("io.opentelemetry.extension.trace.propagation", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.trace.propagation")
7980
}
8081
}

javaagent-core/src/main/java/org/hypertrace/agent/core/EnvironmentConfig.java

+5
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ private EnvironmentConfig() {}
4545
private static final String OPA_PREFIX = REPORTING_PREFIX + "opa.";
4646
static final String OPA_ENDPOINT = OPA_PREFIX + "endpoint";
4747
static final String OPA_POLL_PERIOD = OPA_PREFIX + "poll.period.seconds";
48+
static final String OPA_ENABLED = OPA_PREFIX + "enabled";
4849

4950
private static final String CAPTURE_PREFIX = HT_PREFIX + "data.capture.";
5051
public static final String CAPTURE_BODY_MAX_SIZE_BYTES = CAPTURE_PREFIX + "body.max.size.bytes";
@@ -103,6 +104,10 @@ private static Opa.Builder applyOpa(Opa.Builder builder) {
103104
builder.setPollPeriodSeconds(
104105
Int32Value.newBuilder().setValue(Integer.parseInt(pollPeriod)).build());
105106
}
107+
String enabled = getProperty(OPA_ENABLED);
108+
if (enabled != null) {
109+
builder.setEnabled(BoolValue.newBuilder().setValue(Boolean.valueOf(enabled)).build());
110+
}
106111
return builder;
107112
}
108113

javaagent-core/src/test/java/org/hypertrace/agent/core/EnvironmentConfigTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class EnvironmentConfigTest {
3131
@ClearSystemProperty(key = EnvironmentConfig.REPORTING_SECURE)
3232
@ClearSystemProperty(key = EnvironmentConfig.OPA_ENDPOINT)
3333
@ClearSystemProperty(key = EnvironmentConfig.OPA_POLL_PERIOD)
34+
@ClearSystemProperty(key = EnvironmentConfig.OPA_ENABLED)
3435
@ClearSystemProperty(key = EnvironmentConfig.PROPAGATION_FORMATS)
3536
@ClearSystemProperty(key = EnvironmentConfig.CAPTURE_HTTP_BODY_PREFIX + "request")
3637
@ClearSystemProperty(key = EnvironmentConfig.CAPTURE_BODY_MAX_SIZE_BYTES)
@@ -42,6 +43,7 @@ public void systemProperties() {
4243
System.setProperty(EnvironmentConfig.CAPTURE_HTTP_BODY_PREFIX + "request", "true");
4344
System.setProperty(EnvironmentConfig.OPA_ENDPOINT, "http://azkaban:9090");
4445
System.setProperty(EnvironmentConfig.OPA_POLL_PERIOD, "10");
46+
System.setProperty(EnvironmentConfig.OPA_ENABLED, "true");
4547
System.setProperty(EnvironmentConfig.PROPAGATION_FORMATS, "B3,TRACECONTEXT");
4648
System.setProperty(EnvironmentConfig.CAPTURE_BODY_MAX_SIZE_BYTES, "512");
4749

@@ -56,6 +58,7 @@ public void systemProperties() {
5658
Assertions.assertEquals("http://:-)", agentConfig.getReporting().getEndpoint().getValue());
5759
Assertions.assertEquals(
5860
"http://azkaban:9090", agentConfig.getReporting().getOpa().getEndpoint().getValue());
61+
Assertions.assertEquals(true, agentConfig.getReporting().getOpa().getEnabled().getValue());
5962
Assertions.assertEquals(
6063
10, agentConfig.getReporting().getOpa().getPollPeriodSeconds().getValue());
6164
Assertions.assertEquals(512, agentConfig.getDataCapture().getBodyMaxSizeBytes().getValue());

javaagent/build.gradle.kts

+1-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ dependencies {
1414
implementation("io.opentelemetry.javaagent", "opentelemetry-javaagent", version = "${versions["opentelemetry_java_agent"]}", classifier = "all")
1515
implementation(project(":javaagent-core"))
1616
implementation(project(":filter-api"))
17-
implementation(project(":filter-custom-opa"))
1817
}
1918

2019
base.archivesBaseName = "hypertrace-agent"
@@ -45,10 +44,6 @@ tasks {
4544

4645
relocate("com.blogspot.mydailyjava", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.com.blogspot.mydailyjava")
4746

48-
// used by the filter-custom-opa
49-
relocate("okhttp3", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.okhttp3")
50-
relocate("okio", "io.opentelemetry.javaagent.shaded.org.hypertrace.shaded.okio")
51-
5247
dependencies {
5348
exclude(dependency("org.codehaus.mojo:animal-sniffer-annotations"))
5449
exclude(dependency("javax.annotation:javax.annotation-api"))
@@ -65,6 +60,7 @@ tasks {
6560
relocate("io.opentelemetry.api", "io.opentelemetry.javaagent.shaded.io.opentelemetry.api")
6661
relocate("io.opentelemetry.spi", "io.opentelemetry.javaagent.shaded.io.opentelemetry.spi")
6762
relocate("io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context")
63+
relocate("io.opentelemetry.extension.trace.propagation", "io.opentelemetry.javaagent.shaded.io.opentelemetry.extension.trace.propagation")
6864

6965
mergeServiceFiles {
7066
include("inst/META-INF/services/*")

otel-extensions/build.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ plugins {
55
val versions: Map<String, String> by extra
66

77
dependencies {
8+
api(project(":filter-custom-opa"))
9+
810
compileOnly("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}")
911
implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}")
1012

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The Hypertrace Authors
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 org.hypertrace.agent.otel.extensions;
18+
19+
import com.google.auto.service.AutoService;
20+
import io.opentelemetry.javaagent.spi.ComponentInstaller;
21+
import org.hypertrace.agent.filter.FilterRegistry;
22+
23+
@AutoService(ComponentInstaller.class)
24+
public class FilterComponentInstaller implements ComponentInstaller {
25+
26+
@Override
27+
public void beforeByteBuddyAgent() {
28+
// resolves filter via service loader resolution
29+
FilterRegistry.getFilter();
30+
}
31+
32+
@Override
33+
public void afterByteBuddyAgent() {}
34+
}

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/processor/HypertraceTracerCustomizer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import com.google.auto.service.AutoService;
2020
import io.opentelemetry.javaagent.spi.TracerCustomizer;
21-
import io.opentelemetry.sdk.trace.TracerSdkManagement;
21+
import io.opentelemetry.sdk.trace.SdkTracerManagement;
2222

2323
/**
2424
* This is a workaround to add container ID tags to spans when Zipkin exporter is used. Zipkin
@@ -32,7 +32,7 @@
3232
public class HypertraceTracerCustomizer implements TracerCustomizer {
3333

3434
@Override
35-
public void configure(TracerSdkManagement tracerManagement) {
35+
public void configure(SdkTracerManagement tracerManagement) {
3636
String exporter = System.getProperty("otel.exporter");
3737
if (exporter != null && exporter.contains("zipkin")) {
3838
tracerManagement.addSpanProcessor(new AddTagsSpanProcessor());

testing-common/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ dependencies {
1414
api("io.opentelemetry:opentelemetry-sdk:${versions["opentelemetry"]}")
1515
api("com.squareup.okhttp3:okhttp:4.9.0")
1616
implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions["opentelemetry_java_agent"]}")
17+
implementation("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions["opentelemetry_java_agent"]}")
1718
implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:${versions["opentelemetry_java_agent"]}")
1819
implementation("ch.qos.logback:logback-classic:1.2.3")
1920
implementation("org.slf4j:log4j-over-slf4j:1.7.30")

0 commit comments

Comments
 (0)