Change the default javaagent artifact to have exporters (#4106)
* Change default javaagent to all, introduce slim * Update release builds * Update examples build * Update benchmark-overhead * Update benchmark-e2e * Update docs where ok pre-release * Update misc * Fix references to fullJavaagentJar * Fix it * Delete doc for pre-1.0 releases * Attach backwards compatible "all" artifact to releases * Comment * Comment * guessing * fix * Update version * Add otlp/grpc exporter to slim artifact * Fix comment
This commit is contained in:
parent
ff0bf0a8f3
commit
cfdc4ac7e5
|
@ -273,6 +273,18 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}-all.jar
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}.jar
|
||||
asset_name: opentelemetry-javaagent.jar
|
||||
asset_content_type: application/java-archive
|
||||
|
||||
# TODO (trask) delete this after the 1.7.0 release (to make sure it is used for any 1.6.x patches)
|
||||
- name: Upload Release Asset (backwards compatible "all" artifact)
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@v1.0.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}.jar
|
||||
asset_name: opentelemetry-javaagent-all.jar
|
||||
asset_content_type: application/java-archive
|
||||
|
|
|
@ -181,6 +181,18 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}-all.jar
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}.jar
|
||||
asset_name: opentelemetry-javaagent.jar
|
||||
asset_content_type: application/java-archive
|
||||
|
||||
# TODO (trask) delete this after the 1.7.0 release
|
||||
- name: Upload Release Asset (backwards compatible "all" artifact)
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@v1.0.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ github.event.inputs.version }}.jar
|
||||
asset_name: opentelemetry-javaagent-all.jar
|
||||
asset_content_type: application/java-archive
|
||||
|
|
|
@ -32,7 +32,7 @@ java -version
|
|||
|
||||
and then you can find the java agent artifact at
|
||||
|
||||
`javaagent/build/libs/opentelemetry-javaagent-<version>-all.jar`.
|
||||
`javaagent/build/libs/opentelemetry-javaagent-<version>.jar`.
|
||||
|
||||
### IntelliJ setup and troubleshooting
|
||||
|
||||
|
|
|
@ -14,11 +14,11 @@ dependencies {
|
|||
|
||||
tasks {
|
||||
test {
|
||||
dependsOn(":javaagent:fullJavaagentJar")
|
||||
dependsOn(":javaagent:shadowJar")
|
||||
maxParallelForks = 2
|
||||
|
||||
doFirst {
|
||||
jvmArgs("-Dio.opentelemetry.smoketest.agent.shadowJar.path=${project(":javaagent").tasks.getByName<ShadowJar>("fullJavaagentJar").archivePath}")
|
||||
jvmArgs("-Dio.opentelemetry.smoketest.agent.shadowJar.path=${project(":javaagent").tasks.getByName<ShadowJar>("shadowJar").archivePath}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,9 +79,9 @@ public class AgentBenchmark {
|
|||
.withLogConsumer(new Slf4jLogConsumer(logger))
|
||||
.withNetworkAliases("app")
|
||||
.withCopyFileToContainer(
|
||||
MountableFile.forHostPath(agentPath), "/opentelemetry-javaagent-all.jar")
|
||||
MountableFile.forHostPath(agentPath), "/opentelemetry-javaagent.jar")
|
||||
.withEnv("OTEL_EXPORTER_OTLP_ENDPOINT", "collector:4317")
|
||||
.withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/opentelemetry-javaagent-all.jar")
|
||||
.withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/opentelemetry-javaagent.jar")
|
||||
.withExposedPorts(8080);
|
||||
containers.add(app);
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ tasks {
|
|||
val jmhStartFlightRecording = gradle.startParameter.projectProperties.get("jmh.startFlightRecording")
|
||||
|
||||
named<JMHTask>("jmh") {
|
||||
val shadowTask = project(":javaagent").tasks.named<ShadowJar>("fullJavaagentJar").get()
|
||||
val shadowTask = project(":javaagent").tasks.named<ShadowJar>("shadowJar").get()
|
||||
inputs.files(layout.files(shadowTask))
|
||||
|
||||
// note: without an exporter, toSpanData() won't even be called
|
||||
|
|
|
@ -43,7 +43,7 @@ public class AgentResolver {
|
|||
OkHttpClient client = new OkHttpClient();
|
||||
Response response = client.newCall(request).execute();
|
||||
byte[] raw = response.body().bytes();
|
||||
Path path = Paths.get(".", "opentelemetry-javaagent-all.jar");
|
||||
Path path = Paths.get(".", "opentelemetry-javaagent.jar");
|
||||
Files.write(
|
||||
path,
|
||||
raw,
|
||||
|
|
|
@ -35,7 +35,7 @@ public class LatestAgentSnapshotResolver {
|
|||
String latestFilename = fetchLatestFilename(version);
|
||||
String url = BASE_URL + "/" + version + "/" + latestFilename;
|
||||
byte[] jarBytes = fetchBodyBytesFrom(url);
|
||||
Path path = Paths.get(".", "opentelemetry-javaagent-SNAPSHOT-all.jar");
|
||||
Path path = Paths.get(".", "opentelemetry-javaagent-SNAPSHOT.jar");
|
||||
Files.write(
|
||||
path,
|
||||
jarBytes,
|
||||
|
@ -55,11 +55,12 @@ public class LatestAgentSnapshotResolver {
|
|||
elem -> {
|
||||
String classifier = $(elem).child("classifier").content();
|
||||
String extension = $(elem).child("extension").content();
|
||||
// TODO (trask) this needs to be updated now that no more "all" artifact
|
||||
return "all".equals(classifier) && "jar".equals(extension);
|
||||
})
|
||||
.map(e -> $(e).child("value").content())
|
||||
.findFirst()
|
||||
.map(value -> "opentelemetry-javaagent-" + value + "-all.jar")
|
||||
.map(value -> "opentelemetry-javaagent-" + value + ".jar")
|
||||
.orElseThrow();
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ tasks {
|
|||
}
|
||||
|
||||
named("jmh") {
|
||||
dependsOn(":javaagent:fullJavaagentJar")
|
||||
dependsOn(":javaagent:shadowJar")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,5 +33,5 @@ The following example shows remote debugger configuration. The breakpoints
|
|||
should work in any code except ByteBuddy advice methods.
|
||||
|
||||
```bash
|
||||
java -agentlib:jdwp="transport=dt_socket,server=y,suspend=y,address=5000" -javaagent:opentelemetry-javaagent-<version>-all.jar -jar app.jar
|
||||
java -agentlib:jdwp="transport=dt_socket,server=y,suspend=y,address=5000" -javaagent:opentelemetry-javaagent-<version>.jar -jar app.jar
|
||||
```
|
||||
|
|
|
@ -72,7 +72,7 @@ still access helper classes from bootstrap classloader.
|
|||
### Agent jar structure
|
||||
|
||||
If you now look inside
|
||||
`javaagent/build/libs/opentelemetry-javaagent-<version>-all.jar`, you will see the
|
||||
`javaagent/build/libs/opentelemetry-javaagent-<version>.jar`, you will see the
|
||||
following "clusters" of classes:
|
||||
|
||||
Available in the system class loader:
|
||||
|
@ -94,7 +94,7 @@ during creation of `javaagent` jar file by Shadow Gradle plugin
|
|||
Available in the agent class loader:
|
||||
- `inst/` - contains `javaagent-tooling` and `javaagent-extension-api` modules and
|
||||
`instrumentation` submodules, loaded and isolated inside `AgentClassLoader`.
|
||||
Including OpenTelemetry SDK (and the built-in exporters when using the `-all` artifact).
|
||||
Includes the OpenTelemetry SDK.
|
||||
|
||||

|
||||
[Image source](https://docs.google.com/drawings/d/1GHAcJ8AOaf_v2Ip82cQD9dN0mtvSk2C1B11KfwV2U8o)
|
||||
|
|
|
@ -18,11 +18,6 @@ or they might want to manually create spans for their own custom code.
|
|||
|
||||
# Dependencies
|
||||
|
||||
> :warning: prior to version 1.0.0, `opentelemetry-javaagent-all.jar`
|
||||
only supports manual instrumentation using the `opentelemetry-api` version with the same version
|
||||
number as the Java agent you are using. Starting with 1.0.0, the Java agent will start supporting
|
||||
multiple (1.0.0+) versions of `opentelemetry-api`.
|
||||
|
||||
You'll need to add a dependency on the `opentelemetry-api` library to get started; if you intend to
|
||||
use the `@WithSpan` annotation, also include the `opentelemetry-extension-annotations` dependency.
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ configurations {
|
|||
dependencies {
|
||||
customShadow project(path: ":custom", configuration: "shadow")
|
||||
customShadow project(path: ":instrumentation", configuration: "shadow")
|
||||
implementation "io.opentelemetry.javaagent:opentelemetry-javaagent:${versions.opentelemetryJavaagent}:all"
|
||||
implementation "io.opentelemetry.javaagent:opentelemetry-javaagent:${versions.opentelemetryJavaagent}"
|
||||
}
|
||||
|
||||
CopySpec isolateSpec() {
|
||||
|
|
|
@ -92,7 +92,7 @@ dependencies {
|
|||
testRuntimeOnly("ch.qos.logback:logback-classic:1.2.3")
|
||||
|
||||
//Otel Java instrumentation that we use and extend during integration tests
|
||||
otel("io.opentelemetry.javaagent:opentelemetry-javaagent:${versions.opentelemetryJavaagent}:all")
|
||||
otel("io.opentelemetry.javaagent:opentelemetry-javaagent:${versions.opentelemetryJavaagent}")
|
||||
|
||||
//TODO remove when start using io.opentelemetry.instrumentation.javaagent-instrumentation plugin
|
||||
add("codegen", "io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions.opentelemetryJavaagentAlpha}")
|
||||
|
@ -111,7 +111,7 @@ task agentManifest(type: Copy) {
|
|||
//The location of extension directory inside agent jar is hard-coded in the agent source code
|
||||
task extendedAgent(type: Jar) {
|
||||
dependsOn agentManifest
|
||||
archiveFileName = "opentelemetry-javaagent-all.jar"
|
||||
archiveFileName = "opentelemetry-javaagent.jar"
|
||||
manifest.from "$buildDir/META-INF/MANIFEST.MF"
|
||||
from zipTree(configurations.otel.singleFile)
|
||||
from(tasks.shadowJar.archiveFile) {
|
||||
|
|
|
@ -11,8 +11,8 @@ plugins {
|
|||
|
||||
// TODO write a smoke test that does the following:
|
||||
//
|
||||
// docker run --mount 'type=bind,src=$AGENT_PATH,dst=/opentelemetry-javaagent-all.jar'
|
||||
// -e JAVA_TOOL_OPTIONS=-javaagent:/opentelemetry-javaagent-all.jar
|
||||
// docker run --mount 'type=bind,src=$AGENT_PATH,dst=/opentelemetry-javaagent.jar'
|
||||
// -e JAVA_TOOL_OPTIONS=-javaagent:/opentelemetry-javaagent.jar
|
||||
// wso2/wso2ei-business-process:6.5.0
|
||||
//
|
||||
// without this instrumentation, the following error will appear in the docker logs:
|
||||
|
|
|
@ -35,9 +35,14 @@ val exporterLibs by configurations.creating {
|
|||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
}
|
||||
// this configuration collects just exporter libs for slim artifact (also placed in the agent classloader & isolated from the instrumented application)
|
||||
val exporterSlimLibs by configurations.creating {
|
||||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
}
|
||||
|
||||
// exclude dependencies that are to be placed in bootstrap from agent libs - they won't be added to inst/
|
||||
listOf(javaagentLibs, exporterLibs).forEach {
|
||||
listOf(javaagentLibs, exporterLibs, exporterSlimLibs).forEach {
|
||||
it.run {
|
||||
exclude("org.slf4j")
|
||||
exclude("io.opentelemetry", "opentelemetry-api")
|
||||
|
@ -73,6 +78,10 @@ dependencies {
|
|||
|
||||
exporterLibs(project(":javaagent-exporters"))
|
||||
|
||||
exporterSlimLibs("io.opentelemetry:opentelemetry-exporter-otlp")
|
||||
exporterSlimLibs("io.opentelemetry:opentelemetry-exporter-otlp-metrics")
|
||||
exporterSlimLibs("io.grpc:grpc-okhttp:1.41.0")
|
||||
|
||||
// We only have compileOnly dependencies on these to make sure they don't leak into POMs.
|
||||
licenseReportDependencies("com.github.ben-manes.caffeine:caffeine") {
|
||||
isTransitive = false
|
||||
|
@ -143,12 +152,23 @@ tasks {
|
|||
archiveFileName.set("exporterLibs-relocated.jar")
|
||||
}
|
||||
|
||||
// Includes instrumentations, but not exporters
|
||||
val relocateExporterSlimLibs by registering(ShadowJar::class) {
|
||||
configurations = listOf(exporterSlimLibs)
|
||||
|
||||
archiveFileName.set("exporterSlimLibs-relocated.jar")
|
||||
}
|
||||
|
||||
// Includes everything needed for OOTB experience
|
||||
val shadowJar by existing(ShadowJar::class) {
|
||||
configurations = listOf(bootstrapLibs)
|
||||
|
||||
dependsOn(relocateJavaagentLibs)
|
||||
// without an explicit dependency on jar here, :javaagent:test fails on CI because :javaagent:jar
|
||||
// runs after :javaagent:shadowJar and loses (at least) the manifest entries
|
||||
dependsOn(jar, relocateJavaagentLibs, relocateExporterLibs)
|
||||
isolateClasses(relocateJavaagentLibs.get().outputs.files)
|
||||
isolateClasses(relocateExporterLibs.get().outputs.files)
|
||||
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
|
||||
archiveClassifier.set("")
|
||||
|
||||
|
@ -164,17 +184,15 @@ tasks {
|
|||
}
|
||||
}
|
||||
|
||||
// Includes everything needed for OOTB experience
|
||||
val fullJavaagentJar by registering(ShadowJar::class) {
|
||||
// Includes instrumentations plus the OTLP/gRPC exporters
|
||||
val slimShadowJar by registering(ShadowJar::class) {
|
||||
configurations = listOf(bootstrapLibs)
|
||||
|
||||
dependsOn(relocateJavaagentLibs, relocateExporterLibs)
|
||||
dependsOn(relocateJavaagentLibs, relocateExporterSlimLibs)
|
||||
isolateClasses(relocateJavaagentLibs.get().outputs.files)
|
||||
isolateClasses(relocateExporterLibs.get().outputs.files)
|
||||
isolateClasses(relocateExporterSlimLibs.get().outputs.files)
|
||||
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
|
||||
archiveClassifier.set("all")
|
||||
archiveClassifier.set("slim")
|
||||
|
||||
manifest {
|
||||
attributes(shadowJar.get().manifest.attributes)
|
||||
|
@ -207,18 +225,18 @@ tasks {
|
|||
}
|
||||
|
||||
assemble {
|
||||
dependsOn(shadowJar, fullJavaagentJar, baseJavaagentJar)
|
||||
dependsOn(shadowJar, slimShadowJar, baseJavaagentJar)
|
||||
}
|
||||
|
||||
withType<Test>().configureEach {
|
||||
dependsOn(fullJavaagentJar)
|
||||
inputs.file(fullJavaagentJar.get().archiveFile)
|
||||
dependsOn(shadowJar)
|
||||
inputs.file(shadowJar.get().archiveFile)
|
||||
|
||||
jvmArgs("-Dotel.javaagent.debug=true")
|
||||
|
||||
doFirst {
|
||||
// Defining here to allow jacoco to be first on the command line.
|
||||
jvmArgs("-javaagent:${fullJavaagentJar.get().archiveFile.get().asFile}")
|
||||
jvmArgs("-javaagent:${shadowJar.get().archiveFile.get().asFile}")
|
||||
}
|
||||
|
||||
testLogging {
|
||||
|
@ -237,7 +255,7 @@ tasks {
|
|||
publishing {
|
||||
publications {
|
||||
named<MavenPublication>("maven") {
|
||||
artifact(fullJavaagentJar)
|
||||
artifact(slimShadowJar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ dependencies {
|
|||
|
||||
tasks {
|
||||
test {
|
||||
inputs.files(project(":javaagent").tasks.getByName("fullJavaagentJar").outputs.files)
|
||||
inputs.files(project(":javaagent").tasks.getByName("shadowJar").outputs.files)
|
||||
|
||||
testLogging.showStandardStreams = true
|
||||
|
||||
|
@ -78,7 +78,7 @@ tasks {
|
|||
}
|
||||
}
|
||||
|
||||
val shadowTask = project(":javaagent").tasks.named<ShadowJar>("fullJavaagentJar").get()
|
||||
val shadowTask = project(":javaagent").tasks.named<ShadowJar>("shadowJar").get()
|
||||
inputs.files(layout.files(shadowTask))
|
||||
|
||||
doFirst {
|
||||
|
|
Loading…
Reference in New Issue