Deprecate the service name configuration options for exporters (#2566)
* deprecate the service name configurations on the jaeger and zipkin exporters * merge from upstream
This commit is contained in:
parent
1f84ec099b
commit
c9038f0ef0
|
|
@ -7,11 +7,15 @@ package io.opentelemetry.exporter.jaeger.thrift;
|
||||||
|
|
||||||
import io.jaegertracing.thrift.internal.senders.HttpSender;
|
import io.jaegertracing.thrift.internal.senders.HttpSender;
|
||||||
import io.jaegertracing.thrift.internal.senders.ThriftSender;
|
import io.jaegertracing.thrift.internal.senders.ThriftSender;
|
||||||
|
import io.opentelemetry.sdk.resources.Resource;
|
||||||
|
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||||
|
|
||||||
/** Builder utility for this exporter. */
|
/** Builder utility for this exporter. */
|
||||||
public final class JaegerThriftSpanExporterBuilder {
|
public final class JaegerThriftSpanExporterBuilder {
|
||||||
|
|
||||||
private String serviceName = JaegerThriftSpanExporter.DEFAULT_SERVICE_NAME;
|
private String serviceName =
|
||||||
|
Resource.getDefault().getAttributes().get(ResourceAttributes.SERVICE_NAME);
|
||||||
|
|
||||||
private String endpoint = JaegerThriftSpanExporter.DEFAULT_ENDPOINT;
|
private String endpoint = JaegerThriftSpanExporter.DEFAULT_ENDPOINT;
|
||||||
private ThriftSender thriftSender;
|
private ThriftSender thriftSender;
|
||||||
|
|
||||||
|
|
@ -28,11 +32,15 @@ public final class JaegerThriftSpanExporterBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the service name to be used by this exporter. Required.
|
* Sets the service name to be used by this exporter, if none is found in the Resource associated
|
||||||
|
* with a span.
|
||||||
*
|
*
|
||||||
* @param serviceName the service name.
|
* @param serviceName the service name.
|
||||||
* @return this.
|
* @return this.
|
||||||
|
* @deprecated The default service name is now extracted from the default Resource. This method
|
||||||
|
* will be removed in the next release.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public JaegerThriftSpanExporterBuilder setServiceName(String serviceName) {
|
public JaegerThriftSpanExporterBuilder setServiceName(String serviceName) {
|
||||||
this.serviceName = serviceName;
|
this.serviceName = serviceName;
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,6 @@ class JaegerThriftIntegrationTest {
|
||||||
|
|
||||||
SpanExporter jaegerExporter =
|
SpanExporter jaegerExporter =
|
||||||
JaegerThriftSpanExporter.builder()
|
JaegerThriftSpanExporter.builder()
|
||||||
.setServiceName(SERVICE_NAME)
|
|
||||||
.setEndpoint(JAEGER_URL + ":" + mappedPort + "/api/traces")
|
.setEndpoint(JAEGER_URL + ":" + mappedPort + "/api/traces")
|
||||||
.build();
|
.build();
|
||||||
return OpenTelemetrySdk.builder()
|
return OpenTelemetrySdk.builder()
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,7 @@ class JaegerThriftSpanExporterTest {
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void beforeEach() {
|
void beforeEach() {
|
||||||
exporter =
|
exporter = JaegerThriftSpanExporter.builder().setThriftSender(thriftSender).build();
|
||||||
JaegerThriftSpanExporter.builder()
|
|
||||||
.setThriftSender(thriftSender)
|
|
||||||
.setServiceName("myservice.name")
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,15 @@ public final class JaegerGrpcSpanExporterBuilder {
|
||||||
private long timeoutNanos = TimeUnit.SECONDS.toNanos(DEFAULT_TIMEOUT_SECS);
|
private long timeoutNanos = TimeUnit.SECONDS.toNanos(DEFAULT_TIMEOUT_SECS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the service name to be used by this exporter. Required.
|
* Sets the service name to be used by this exporter, if none is found in the Resource associated
|
||||||
|
* with a span.
|
||||||
*
|
*
|
||||||
* @param serviceName the service name.
|
* @param serviceName the service name.
|
||||||
* @return this.
|
* @return this.
|
||||||
|
* @deprecated The default service name is now extracted from the default Resource. This method
|
||||||
|
* will be removed in the next release.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public JaegerGrpcSpanExporterBuilder setServiceName(String serviceName) {
|
public JaegerGrpcSpanExporterBuilder setServiceName(String serviceName) {
|
||||||
this.serviceName = serviceName;
|
this.serviceName = serviceName;
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ class JaegerGrpcSpanExporterTest {
|
||||||
closer.register(server::shutdownNow);
|
closer.register(server::shutdownNow);
|
||||||
|
|
||||||
ManagedChannel channel = InProcessChannelBuilder.forName(serverName).directExecutor().build();
|
ManagedChannel channel = InProcessChannelBuilder.forName(serverName).directExecutor().build();
|
||||||
exporter = JaegerGrpcSpanExporter.builder().setServiceName("test").setChannel(channel).build();
|
exporter = JaegerGrpcSpanExporter.builder().setChannel(channel).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ class JaegerIntegrationTest {
|
||||||
.build();
|
.build();
|
||||||
SpanExporter jaegerExporter =
|
SpanExporter jaegerExporter =
|
||||||
JaegerGrpcSpanExporter.builder()
|
JaegerGrpcSpanExporter.builder()
|
||||||
.setServiceName(SERVICE_NAME)
|
|
||||||
.setChannel(jaegerChannel)
|
.setChannel(jaegerChannel)
|
||||||
.setTimeout(Duration.ofSeconds(30))
|
.setTimeout(Duration.ofSeconds(30))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ import zipkin2.reporter.Sender;
|
||||||
*/
|
*/
|
||||||
public final class ZipkinSpanExporter implements SpanExporter {
|
public final class ZipkinSpanExporter implements SpanExporter {
|
||||||
public static final String DEFAULT_ENDPOINT = "http://localhost:9411/api/v2/spans";
|
public static final String DEFAULT_ENDPOINT = "http://localhost:9411/api/v2/spans";
|
||||||
public static final String DEFAULT_SERVICE_NAME = "unknown";
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(ZipkinSpanExporter.class.getName());
|
private static final Logger logger = Logger.getLogger(ZipkinSpanExporter.class.getName());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,13 @@ import zipkin2.reporter.okhttp3.OkHttpSender;
|
||||||
public final class ZipkinSpanExporterBuilder {
|
public final class ZipkinSpanExporterBuilder {
|
||||||
private BytesEncoder<Span> encoder = SpanBytesEncoder.JSON_V2;
|
private BytesEncoder<Span> encoder = SpanBytesEncoder.JSON_V2;
|
||||||
private Sender sender;
|
private Sender sender;
|
||||||
private String serviceName = ZipkinSpanExporter.DEFAULT_SERVICE_NAME;
|
private String serviceName =
|
||||||
|
Resource.getDefault().getAttributes().get(ResourceAttributes.SERVICE_NAME);
|
||||||
private String endpoint = ZipkinSpanExporter.DEFAULT_ENDPOINT;
|
private String endpoint = ZipkinSpanExporter.DEFAULT_ENDPOINT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Label of the remote node in the service graph, such as "favstar". Avoid names with variables or
|
* Label of the remote node in the service graph, such as "favstar". Avoid names with variables or
|
||||||
* unique identifiers embedded. Defaults to "unknown".
|
* unique identifiers embedded. Defaults to the service.name specified in the default Resource.
|
||||||
*
|
*
|
||||||
* <p>This is a primary label for trace lookup and aggregation, so it should be intuitive and
|
* <p>This is a primary label for trace lookup and aggregation, so it should be intuitive and
|
||||||
* consistent. Many use a name from service discovery.
|
* consistent. Many use a name from service discovery.
|
||||||
|
|
@ -30,13 +31,14 @@ public final class ZipkinSpanExporterBuilder {
|
||||||
* <p>Note: this value, will be superseded by the value of {@link ResourceAttributes#SERVICE_NAME}
|
* <p>Note: this value, will be superseded by the value of {@link ResourceAttributes#SERVICE_NAME}
|
||||||
* if it has been set in the {@link Resource} associated with the Tracer that created the spans.
|
* if it has been set in the {@link Resource} associated with the Tracer that created the spans.
|
||||||
*
|
*
|
||||||
* <p>This property is required to be set.
|
|
||||||
*
|
|
||||||
* @param serviceName The service name. It defaults to "unknown".
|
* @param serviceName The service name. It defaults to "unknown".
|
||||||
* @return this.
|
* @return this.
|
||||||
* @see Resource
|
* @see Resource
|
||||||
* @see ResourceAttributes
|
* @see ResourceAttributes
|
||||||
|
* @deprecated The default service name is now extracted from the default Resource. This method
|
||||||
|
* will be removed in the next release.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public ZipkinSpanExporterBuilder setServiceName(String serviceName) {
|
public ZipkinSpanExporterBuilder setServiceName(String serviceName) {
|
||||||
this.serviceName = serviceName;
|
this.serviceName = serviceName;
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,12 @@ import io.opentelemetry.api.trace.SpanContext;
|
||||||
import io.opentelemetry.api.trace.TraceFlags;
|
import io.opentelemetry.api.trace.TraceFlags;
|
||||||
import io.opentelemetry.api.trace.TraceState;
|
import io.opentelemetry.api.trace.TraceState;
|
||||||
import io.opentelemetry.sdk.common.CompletableResultCode;
|
import io.opentelemetry.sdk.common.CompletableResultCode;
|
||||||
|
import io.opentelemetry.sdk.resources.Resource;
|
||||||
import io.opentelemetry.sdk.testing.trace.TestSpanData;
|
import io.opentelemetry.sdk.testing.trace.TestSpanData;
|
||||||
import io.opentelemetry.sdk.trace.data.EventData;
|
import io.opentelemetry.sdk.trace.data.EventData;
|
||||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||||
import io.opentelemetry.sdk.trace.data.StatusData;
|
import io.opentelemetry.sdk.trace.data.StatusData;
|
||||||
|
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
@ -53,26 +55,19 @@ public class ZipkinSpanExporterEndToEndHttpTest {
|
||||||
private static final String ENDPOINT_V1_SPANS = "/api/v1/spans";
|
private static final String ENDPOINT_V1_SPANS = "/api/v1/spans";
|
||||||
private static final String ENDPOINT_V2_SPANS = "/api/v2/spans";
|
private static final String ENDPOINT_V2_SPANS = "/api/v2/spans";
|
||||||
private static final String SERVICE_NAME = "myService";
|
private static final String SERVICE_NAME = "myService";
|
||||||
private static final Endpoint localEndpoint =
|
|
||||||
ZipkinSpanExporter.produceLocalEndpoint(SERVICE_NAME);
|
|
||||||
|
|
||||||
@Rule public ZipkinRule zipkin = new ZipkinRule();
|
@Rule public ZipkinRule zipkin = new ZipkinRule();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExportWithDefaultEncoding() {
|
public void testExportWithDefaultEncoding() {
|
||||||
|
|
||||||
ZipkinSpanExporter exporter =
|
ZipkinSpanExporter exporter =
|
||||||
ZipkinSpanExporter.builder()
|
ZipkinSpanExporter.builder().setEndpoint(zipkin.httpUrl() + ENDPOINT_V2_SPANS).build();
|
||||||
.setEndpoint(zipkin.httpUrl() + ENDPOINT_V2_SPANS)
|
|
||||||
.setServiceName(SERVICE_NAME)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
exportAndVerify(exporter);
|
exportAndVerify(exporter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExportAsProtobuf() {
|
public void testExportAsProtobuf() {
|
||||||
|
|
||||||
ZipkinSpanExporter exporter =
|
ZipkinSpanExporter exporter =
|
||||||
buildZipkinExporter(
|
buildZipkinExporter(
|
||||||
zipkin.httpUrl() + ENDPOINT_V2_SPANS, Encoding.PROTO3, SpanBytesEncoder.PROTO3);
|
zipkin.httpUrl() + ENDPOINT_V2_SPANS, Encoding.PROTO3, SpanBytesEncoder.PROTO3);
|
||||||
|
|
@ -81,7 +76,6 @@ public class ZipkinSpanExporterEndToEndHttpTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExportAsThrift() {
|
public void testExportAsThrift() {
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // we have to use the deprecated thrift encoding to test it
|
@SuppressWarnings("deprecation") // we have to use the deprecated thrift encoding to test it
|
||||||
ZipkinSpanExporter exporter =
|
ZipkinSpanExporter exporter =
|
||||||
buildZipkinExporter(
|
buildZipkinExporter(
|
||||||
|
|
@ -116,7 +110,6 @@ public class ZipkinSpanExporterEndToEndHttpTest {
|
||||||
String endpoint, Encoding encoding, SpanBytesEncoder encoder) {
|
String endpoint, Encoding encoding, SpanBytesEncoder encoder) {
|
||||||
return ZipkinSpanExporter.builder()
|
return ZipkinSpanExporter.builder()
|
||||||
.setSender(OkHttpSender.newBuilder().endpoint(endpoint).encoding(encoding).build())
|
.setSender(OkHttpSender.newBuilder().endpoint(endpoint).encoding(encoding).build())
|
||||||
.setServiceName(SERVICE_NAME)
|
|
||||||
.setEncoder(encoder)
|
.setEncoder(encoder)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +149,8 @@ public class ZipkinSpanExporterEndToEndHttpTest {
|
||||||
.setEvents(annotations)
|
.setEvents(annotations)
|
||||||
.setLinks(Collections.emptyList())
|
.setLinks(Collections.emptyList())
|
||||||
.setEndEpochNanos(END_EPOCH_NANOS)
|
.setEndEpochNanos(END_EPOCH_NANOS)
|
||||||
.setHasEnded(true);
|
.setHasEnded(true)
|
||||||
|
.setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, SERVICE_NAME)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Span buildZipkinSpan() {
|
private static Span buildZipkinSpan() {
|
||||||
|
|
@ -168,7 +162,7 @@ public class ZipkinSpanExporterEndToEndHttpTest {
|
||||||
.name(SPAN_NAME)
|
.name(SPAN_NAME)
|
||||||
.timestamp(START_EPOCH_NANOS / 1000)
|
.timestamp(START_EPOCH_NANOS / 1000)
|
||||||
.duration((END_EPOCH_NANOS / 1000) - (START_EPOCH_NANOS / 1000))
|
.duration((END_EPOCH_NANOS / 1000) - (START_EPOCH_NANOS / 1000))
|
||||||
.localEndpoint(localEndpoint)
|
.localEndpoint(Endpoint.newBuilder().serviceName(SERVICE_NAME).build())
|
||||||
.addAnnotation(RECEIVED_TIMESTAMP_NANOS / 1000, "RECEIVED")
|
.addAnnotation(RECEIVED_TIMESTAMP_NANOS / 1000, "RECEIVED")
|
||||||
.addAnnotation(SENT_TIMESTAMP_NANOS / 1000, "SENT")
|
.addAnnotation(SENT_TIMESTAMP_NANOS / 1000, "SENT")
|
||||||
.putTag(ZipkinSpanExporter.OTEL_STATUS_CODE, "OK")
|
.putTag(ZipkinSpanExporter.OTEL_STATUS_CODE, "OK")
|
||||||
|
|
|
||||||
|
|
@ -348,16 +348,14 @@ class ZipkinSpanExporterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCreate() {
|
void testCreate() {
|
||||||
ZipkinSpanExporter exporter =
|
ZipkinSpanExporter exporter = ZipkinSpanExporter.builder().setSender(mockSender).build();
|
||||||
ZipkinSpanExporter.builder().setSender(mockSender).setServiceName("myGreatService").build();
|
|
||||||
|
|
||||||
assertThat(exporter).isNotNull();
|
assertThat(exporter).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testShutdown() throws IOException {
|
void testShutdown() throws IOException {
|
||||||
ZipkinSpanExporter exporter =
|
ZipkinSpanExporter exporter = ZipkinSpanExporter.builder().setSender(mockSender).build();
|
||||||
ZipkinSpanExporter.builder().setServiceName("myGreatService").setSender(mockSender).build();
|
|
||||||
|
|
||||||
exporter.shutdown();
|
exporter.shutdown();
|
||||||
verify(mockSender).close();
|
verify(mockSender).close();
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ public class SendTraceToJaeger {
|
||||||
// Export traces to Jaeger
|
// Export traces to Jaeger
|
||||||
JaegerGrpcSpanExporter jaegerExporter =
|
JaegerGrpcSpanExporter jaegerExporter =
|
||||||
JaegerGrpcSpanExporter.builder()
|
JaegerGrpcSpanExporter.builder()
|
||||||
.setServiceName("integration test")
|
|
||||||
.setChannel(jaegerChannel)
|
.setChannel(jaegerChannel)
|
||||||
.setTimeout(Duration.ofSeconds(30))
|
.setTimeout(Duration.ofSeconds(30))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue