Update vendor distribution customization demo with new SDK and agent configurations (#2088)

* Update vendor distribution customization demo with new SDK and agent configurations

* Update doc
This commit is contained in:
Nikita Salnikov-Tarnovski 2021-01-22 08:51:10 +02:00 committed by GitHub
parent 7122c4b2a5
commit 746898da04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 65 additions and 53 deletions

View File

@ -9,7 +9,7 @@ subprojects {
ext {
versions = [
opentelemetry : "0.14.1",
opentelemetryJavaagent : "0.14.0",
opentelemetryJavaagent : "0.15.0-SNAPSHOT",
bytebuddy : "1.10.10",
guava : "30.1-jre"
@ -30,10 +30,7 @@ subprojects {
repositories {
jcenter()
maven {
url = uri("https://dl.bintray.com/open-telemetry/maven")
}
maven {
url = uri("https://oss.jfrog.org/artifactory/oss-snapshot-local")
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
}
mavenCentral()
}

View File

@ -5,8 +5,8 @@ plugins {
dependencies {
compileOnly("io.opentelemetry:opentelemetry-sdk:${versions.opentelemetry}")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${versions.opentelemetry}")
compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-spi:${versions.opentelemetryJavaagent}")
compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-tooling:${versions.opentelemetryJavaagent}")
}
tasks {

View File

@ -7,7 +7,7 @@ import java.util.concurrent.atomic.AtomicLong;
* Custom {@link IdGenerator} which provides span and trace ids.
*
* @see io.opentelemetry.sdk.trace.SdkTracerProvider
* @see DemoTracerCustomizer
* @see DemoSdkTracerProviderConfigurer
*/
public class DemoIdGenerator implements IdGenerator {
private static final AtomicLong traceId = new AtomicLong(0);

View File

@ -10,7 +10,7 @@ import java.util.List;
* See <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/context/api-propagators.md">
* OpenTelemetry Specification</a> for more information about Propagators.
*
* @see DemoTracerCustomizer
* @see DemoPropagatorProvider
*/
public class DemoPropagator implements TextMapPropagator {
private static final String FIELD = "X-demo-field";

View File

@ -0,0 +1,22 @@
package com.example.javaagent;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;
/**
* Registers the custom propagator used by this example.
*
* @see ConfigurablePropagatorProvider
* @see DemoPropagator
*/
public class DemoPropagatorProvider implements ConfigurablePropagatorProvider {
@Override
public TextMapPropagator getPropagator() {
return new DemoPropagator();
}
@Override
public String getName() {
return "demo";
}
}

View File

@ -15,6 +15,7 @@ public class DemoPropertySource implements PropertySource {
public Map<String, String> getProperties() {
return Map.of(
"otel.exporter.otlp.endpoint", "collector:55680",
"otel.exporter.otlp.insecure", "true",
"otel.config.max.attrs", "16"
);
}

View File

@ -4,7 +4,6 @@ import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.trace.data.LinkData;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
import java.util.List;
@ -15,7 +14,7 @@ import java.util.List;
* See <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/sdk.md#sampling">
* OpenTelemetry Specification</a> for more information about span sampling.
*
* @see DemoTracerCustomizer
* @see DemoSdkTracerProviderConfigurer
*/
public class DemoSampler implements Sampler {
@Override

View File

@ -0,0 +1,30 @@
package com.example.javaagent;
import io.opentelemetry.sdk.autoconfigure.spi.SdkTracerProviderConfigurer;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
/**
* This is one of the main entry points for Instrumentation Agent's customizations.
* It allows configuring {@link SdkTracerProviderBuilder}.
* See the {@link #configure(SdkTracerProviderBuilder)} method below.
* <p>
* Also see https://github.com/open-telemetry/opentelemetry-java/issues/2022
*
* @see SdkTracerProviderConfigurer
* @see DemoPropagatorProvider
*/
public class DemoSdkTracerProviderConfigurer implements SdkTracerProviderConfigurer {
@Override
public void configure(SdkTracerProviderBuilder tracerProvider) {
tracerProvider
.setIdGenerator(new DemoIdGenerator())
.setTraceConfig(TraceConfig.builder()
.setSampler(new DemoSampler())
.setMaxLengthOfAttributeValues(128)
.build())
.addSpanProcessor(new DemoSpanProcessor())
.addSpanProcessor(SimpleSpanProcessor.create(new DemoSpanExporter()));
}
}

View File

@ -9,7 +9,7 @@ import java.util.Collection;
* See <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/sdk.md#span-exporter">
* OpenTelemetry Specification</a> for more information about {@link SpanExporter}.
*
* @see DemoTracerCustomizer
* @see DemoSdkTracerProviderConfigurer
*/
public class DemoSpanExporter implements SpanExporter {
@Override

View File

@ -10,7 +10,7 @@ import io.opentelemetry.sdk.trace.SpanProcessor;
* See <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/sdk.md#span-processor">
* OpenTelemetry Specification</a> for more information about {@link SpanProcessor}.
*
* @see DemoTracerCustomizer
* @see DemoSdkTracerProviderConfigurer
*/
public class DemoSpanProcessor implements SpanProcessor {
@Override

View File

@ -1,39 +0,0 @@
package com.example.javaagent;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.javaagent.spi.TracerCustomizer;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.OpenTelemetrySdkBuilder;
import io.opentelemetry.sdk.trace.SdkTracerManagement;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
/**
* This is the main entry point for the majority of Instrumentation Agent's customizations.
* It allows for configuring various aspects of OpenTelemetrySdk.
* See the {@link #configure(SdkTracerManagement)} method below.
* <p>
* Also see https://github.com/open-telemetry/opentelemetry-java/issues/2022
*/
public class DemoTracerCustomizer implements TracerCustomizer {
@Override
public void configure(SdkTracerManagement tracerManagement) {
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.setIdGenerator(new DemoIdGenerator())
.setTraceConfig(TraceConfig.getDefault().toBuilder()
.setSampler(new DemoSampler())
.setMaxLengthOfAttributeValues(128)
.build())
.build();
sdkTracerProvider.addSpanProcessor(new DemoSpanProcessor());
sdkTracerProvider.addSpanProcessor(SimpleSpanProcessor.builder(new DemoSpanExporter()).build());
OpenTelemetrySdkBuilder sdkBuilder = OpenTelemetrySdk.builder()
.setPropagators(ContextPropagators.create(new DemoPropagator()))
.setTracerProvider(sdkTracerProvider);
GlobalOpenTelemetry.set(sdkBuilder.build());
}
}

View File

@ -0,0 +1 @@
com.example.javaagent.DemoSdkTracerProviderConfigurer

View File

@ -88,6 +88,7 @@ abstract class SmokeTest {
.withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/opentelemetry-javaagent.jar")
.withEnv("OTEL_BSP_MAX_EXPORT_BATCH", "1")
.withEnv("OTEL_BSP_SCHEDULE_DELAY", "10")
.withEnv("OTEL_PROPAGATORS", "tracecontext,baggage,demo")
.withEnv(getExtraEnv());
target.start();
}

View File

@ -38,7 +38,7 @@ class SpringBootSmokeTest extends SmokeTest {
Assertions.assertNotNull(response.header("X-server-id"));
Assertions.assertEquals(1, response.headers("X-server-id").size());
Assertions.assertTrue(TraceId.isValid(response.header("X-server-id")));
Assertions.assertEquals(response.body().string(), "Hi!");
Assertions.assertEquals("Hi!", response.body().string());
Assertions.assertEquals(1, countSpansByName(traces, "/greeting"));
Assertions.assertEquals(0, countSpansByName(traces, "WebController.greeting"));
Assertions.assertEquals(1, countSpansByName(traces, "WebController.withSpan"));