Disable elasticsearch-rest-7.0 instrumentation when elasticsearch-jav… (#9450)

This commit is contained in:
Lauri Tulmin 2023-09-13 12:28:39 +03:00 committed by GitHub
parent d6ff40e421
commit 91e668ec76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View File

@ -24,7 +24,7 @@ dependencies {
testImplementation("org.testcontainers:elasticsearch")
// 8.10+ has native, on-by-default opentelemetry instrumentation
latestDepTestLibrary("co.elastic.clients:elasticsearch-java:8.0.+")
latestDepTestLibrary("co.elastic.clients:elasticsearch-java:8.9.+")
}
tasks {

View File

@ -10,6 +10,15 @@ muzzle {
assertInverse.set(true)
}
fail {
group.set("org.elasticsearch.client")
module.set("elasticsearch-rest-client")
versions.set("[8.10,)")
// elasticsearch-java 8.10+ has native, on-by-default opentelemetry instrumentation
// we disable our elasticsearch-rest-client instrumentation when elasticsearch-java is present
extraDependency("co.elastic.clients:elasticsearch-java:8.10.0")
}
fail {
group.set("org.elasticsearch.client")
module.set("rest")

View File

@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.instrumentation.elasticsearch.rest.v7_0;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static java.util.Collections.singletonList;
import static net.bytebuddy.matcher.ElementMatchers.not;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
@ -23,7 +24,12 @@ public class ElasticsearchRest7InstrumentationModule extends InstrumentationModu
@Override
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
// Class `org.elasticsearch.client.RestClient$InternalRequest` introduced in 7.0.0.
return hasClassesNamed("org.elasticsearch.client.RestClient$InternalRequest");
// Since Elasticsearch client version 8.10, the ES client comes with a native OTel
// instrumentation that introduced the class
// `co.elastic.clients.transport.instrumentation.Instrumentation`.
// Disabling agent instrumentation for those cases.
return hasClassesNamed("org.elasticsearch.client.RestClient$InternalRequest")
.and(not(hasClassesNamed("co.elastic.clients.transport.instrumentation.Instrumentation")));
}
@Override