Add exporter factory for JaegerThriftSpanExporter (#1868)

* add exporter factory for JaegerThriftSpanExporter

* add smoke test
This commit is contained in:
jason plumb 2020-12-14 13:02:51 -08:00 committed by GitHub
parent 16bd639d31
commit 4c8b8a77fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 131 additions and 7 deletions

View File

@ -46,6 +46,7 @@ ext {
opentelemetryTraceProps : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-extension-trace-propagators', version: versions.opentelemetry),
opentelemetrySdk : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-sdk', version: versions.opentelemetryAnother),
opentelemetryJaeger : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporter-jaeger', version: versions.opentelemetryOther),
opentelemetryJaegerThrift : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporter-jaeger-thrift', version: versions.opentelemetryOther),
opentelemetryOtlp : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporter-otlp', version: versions.opentelemetryOther),
opentelemetryZipkin : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporter-zipkin', version: versions.opentelemetryOther),
opentelemetryPrometheus : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporter-prometheus', version: versions.opentelemetryOther),

View File

@ -0,0 +1,26 @@
plugins {
id "com.github.johnrengelman.shadow"
}
apply from: "$rootDir/gradle/java.gradle"
apply from: "$rootDir/gradle/publish.gradle"
archivesBaseName = 'javaagent-exporter-jaeger-thrift'
dependencies {
compileOnly(project(":javaagent-spi"))
compileOnly deps.opentelemetrySdk
annotationProcessor deps.autoservice
compileOnly deps.autoservice
implementation(deps.opentelemetryJaegerThrift) {
exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk'
exclude group: 'io.opentelemetry', module: 'opentelemetry-api'
}
}
jar.enabled = false
shadowJar {
archiveClassifier = ''
}

View File

@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.exporters.jaeger;
import com.google.auto.service.AutoService;
import io.opentelemetry.exporter.jaeger.thrift.JaegerThriftSpanExporter;
import io.opentelemetry.javaagent.spi.exporter.SpanExporterFactory;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import java.util.Collections;
import java.util.Properties;
import java.util.Set;
@AutoService(SpanExporterFactory.class)
public class JaegerThriftExporterFactory implements SpanExporterFactory {
@Override
public SpanExporter fromConfig(Properties config) {
return JaegerThriftSpanExporter.builder().readProperties(config).build();
}
@Override
public Set<String> getNames() {
return Collections.singleton("jaeger-thrift");
}
}

View File

@ -14,6 +14,7 @@ dependencies {
testImplementation project(':javaagent-exporters:otlp')
testImplementation project(':javaagent-exporters:jaeger')
testImplementation project(':javaagent-exporters:jaeger-thrift')
testImplementation project(':javaagent-exporters:logging')
testImplementation project(':javaagent-exporters:zipkin')
testImplementation project(':javaagent-exporters:prometheus')
@ -22,6 +23,7 @@ dependencies {
tasks.withType(Test).configureEach() {
dependsOn ':javaagent-exporters:otlp:shadowJar'
dependsOn ':javaagent-exporters:jaeger:shadowJar'
dependsOn ':javaagent-exporters:jaeger-thrift:shadowJar'
dependsOn ':javaagent-exporters:logging:shadowJar'
dependsOn ':javaagent-exporters:zipkin:shadowJar'
dependsOn ':javaagent-exporters:prometheus:shadowJar'
@ -30,6 +32,7 @@ tasks.withType(Test).configureEach() {
systemProperty 'adapterRoot', "$rootDir/javaagent-exporters"
systemProperty 'otlpExporterJar', project(':javaagent-exporters:otlp').tasks.shadowJar.archivePath
systemProperty 'jaegerExporterJar', project(':javaagent-exporters:jaeger').tasks.shadowJar.archivePath
systemProperty 'jaegerThriftExporterJar', project(':javaagent-exporters:jaeger-thrift').tasks.shadowJar.archivePath
systemProperty 'loggingExporterJar', project(':javaagent-exporters:logging').tasks.shadowJar.archivePath
systemProperty 'zipkinExporterJar', project(':javaagent-exporters:zipkin').tasks.shadowJar.archivePath
systemProperty 'prometheusExporterJar', project(':javaagent-exporters:prometheus').tasks.shadowJar.archivePath
@ -44,6 +47,7 @@ dependencies {
shadowInclude project(path: ':javaagent-exporters:logging', configuration: 'shadow')
shadowInclude project(path: ':javaagent-exporters:otlp', configuration: 'shadow')
shadowInclude project(path: ':javaagent-exporters:jaeger', configuration: 'shadow')
shadowInclude project(path: ':javaagent-exporters:jaeger-thrift', configuration: 'shadow')
shadowInclude project(path: ':javaagent-exporters:zipkin', configuration: 'shadow')
shadowInclude project(path: ':javaagent-exporters:prometheus', configuration: 'shadow')
}

View File

@ -16,6 +16,9 @@ class ExporterAdaptersTest extends Specification {
@Shared
def jaegerExporterJar = System.getProperty("jaegerExporterJar")
@Shared
def jaegerThriftExporterJar = System.getProperty("jaegerThriftExporterJar")
@Shared
def loggingExporterJar = System.getProperty("loggingExporterJar")
@ -30,7 +33,7 @@ class ExporterAdaptersTest extends Specification {
file != null
where:
exporter << [otlpExporterJar, jaegerExporterJar, loggingExporterJar, zipkinExporterJar]
exporter << [otlpExporterJar, jaegerExporterJar, jaegerThriftExporterJar, loggingExporterJar, zipkinExporterJar]
}
def "test exporter load"() {
@ -51,10 +54,11 @@ class ExporterAdaptersTest extends Specification {
f.getClass().getName() == classname
where:
exporter | classname
otlpExporterJar | 'io.opentelemetry.javaagent.exporters.otlp.OtlpSpanExporterFactory'
jaegerExporterJar | 'io.opentelemetry.javaagent.exporters.jaeger.JaegerExporterFactory'
loggingExporterJar | 'io.opentelemetry.javaagent.exporters.logging.LoggingExporterFactory'
zipkinExporterJar | 'io.opentelemetry.javaagent.exporters.zipkin.ZipkinExporterFactory'
exporter | classname
otlpExporterJar | 'io.opentelemetry.javaagent.exporters.otlp.OtlpSpanExporterFactory'
jaegerExporterJar | 'io.opentelemetry.javaagent.exporters.jaeger.JaegerExporterFactory'
jaegerThriftExporterJar | 'io.opentelemetry.javaagent.exporters.jaeger.JaegerThriftExporterFactory'
loggingExporterJar | 'io.opentelemetry.javaagent.exporters.logging.LoggingExporterFactory'
zipkinExporterJar | 'io.opentelemetry.javaagent.exporters.zipkin.ZipkinExporterFactory'
}
}

View File

@ -202,6 +202,7 @@ include ':instrumentation-core:servlet-2.2'
// exporter adapters
include ":javaagent-exporters"
include ":javaagent-exporters:jaeger"
include ":javaagent-exporters:jaeger-thrift"
include ":javaagent-exporters:logging"
include ":javaagent-exporters:otlp"
include ":javaagent-exporters:zipkin"

View File

@ -26,7 +26,7 @@ class JaegerExporterSmokeTest extends SmokeTest {
]
}
def "spring boot smoke test with Zipkin"() {
def "spring boot smoke test with jaeger grpc"() {
setup:
startTarget(11)

View File

@ -0,0 +1,58 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.smoketest
import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest
import okhttp3.Request
import java.util.jar.Attributes
import java.util.jar.JarFile
import static java.util.stream.Collectors.toSet
class JaegerThriftExporterSmokeTest extends SmokeTest {
protected String getTargetImage(int jdk, String serverVersion) {
"ghcr.io/open-telemetry/java-test-containers:smoke-springboot-jdk$jdk-20201204.400701583"
}
@Override
protected Map<String, String> getExtraEnv() {
return [
"OTEL_EXPORTER" : "jaeger-thrift",
"OTEL_EXPORTER_JAEGER_ENDPOINT": "http://collector:14268/api/traces"
]
}
def "spring boot smoke test with jaeger thrift"() {
setup:
startTarget(11)
String url = "http://localhost:${target.getMappedPort(8080)}/greeting"
def request = new Request.Builder().url(url).get().build()
def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name.IMPLEMENTATION_VERSION)
when:
def response = CLIENT.newCall(request).execute()
Collection<ExportTraceServiceRequest> traces = waitForTraces()
then:
response.body().string() == "Hi!"
countSpansByName(traces, '/greeting') == 1
countSpansByName(traces, 'WebController.greeting') == 1
countSpansByName(traces, 'WebController.withSpan') == 1
[currentAgentVersion] as Set == findResourceAttribute(traces, "telemetry.auto.version")
.map { it.stringValue }
.collect(toSet())
cleanup:
stopTarget()
}
}

View File

@ -12,6 +12,8 @@ receivers:
zipkin:
jaeger:
protocols:
thrift_http:
endpoint: 0.0.0.0:14268
grpc:
processors: