This case shows using OpenTelemetry(otlp) as the Tracer in the Dubbo project to report the Trace information to the Otlp Collector, which then forwards it to Zipkin and Jagger. Code address
It consists of three parts:
Follow OpenTelemetry Collector Quick Start to start the otlp collector.
Run org.apache.dubbo.springboot.demo.provider.ProviderApplication
directly from IDE.
Start org.apache.dubbo.springboot.demo.consumer.ConsumerApplication
directly from IDE.
Open the zipkin dashboard http://localhost:9411/zipkin/
in the browser:
Open the Jaeger dashboard http://localhost:16686/search
in the browser:
For Spring Boot projects, you can use dubbo-spring-boot-tracing-otel-otlp-starter
:
<!-- OpenTelemetry as Tracer, Otlp as exporter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-tracing-otel-otlp-starter</artifactId>
</dependency>
dubbo:
tracing:
enabled: true # default is false
sampling:
probability: 0.5 # sampling rate, default is 0.1
propagation:
type: W3C # W3C/B3 default is W3C
tracing-exporter:
otlp-config:
endpoint: http://localhost:4317
timeout: 10s # default is 10s
compression-method: none # none/gzip The method used to compress payloads, default is "none"
headers: # customized added headers, default is empty
auth: admin
# tracing info output to logging
logging:
level:
root: info
pattern:
console: '[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2} [%X{traceId:-}, %X{spanId:-}]: %m%n'
<!-- Required, dubbo-tracing core dependency -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-tracing</artifactId>
</dependency>
<!-- Opentelemetry as Tracer -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<!-- OTlp as exporter -->
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
TracingConfig tracingConfig = new TracingConfig();
// Enable dubbo tracing
tracingConfig.setEnabled(true);
// Set the sampling
tracingConfig.setSampling(new SamplingConfig(1.0f));
// Set Propagation, default is W3C, optional W3C/B3
tracingConfig.setPropagation(new PropagationConfig("W3C"));
// Set trace reporting
ExporterConfig exporterConfig = new ExporterConfig();
// Set up trace reporting to Zipkin
exporterConfig.setZipkin(new ExporterConfig.OtlpConfig("http://localhost:4317", Duration.ofSeconds(10), "none"));
tracingConfig.setExporter(exporterConfig);