APM Java Spring Jaeger
Java Spring Jaeger#
Overview#
The Open telemetry Java Spring Jaeger add portable telemetry to your Java application. Those telemetry will be pushed into your APM server
Requirements#
- Unryo application with APM installed
- Jaeger Agents installed where your application is running (More info about Jaeger)
- Java spring application
Dependencies#
The opentracing-spring-jaeger-starter
simply contains the code needed to provide a Jaeger implementation of the OpenTracing's io.opentracing.Tracer
interface.
For a project to be able to actually instrument a Spring stack, one or more of the purpose built starters (like io.opentracing.contrib:opentracing-spring-web-starter
or io.opentracing.contrib:opentracing-spring-cloud-starter
)
would also have to be included in the POM.
The opentracing-spring-jaeger-web-starter
starter is convenience starter that includes both opentracing-spring-jaeger-starter
and opentracing-spring-web-starter
This means that by including it, simple web Spring Boot microservices include all the necessary dependencies to instrument Web requests / responses and send traces to Jaeger.
The opentracing-spring-jaeger-cloud-starter
starter is convenience starter that includes both opentracing-spring-jaeger-starter
and opentracing-spring-cloud-starter
This means that by including it, all parts of the Spring Cloud stack supported by Opentracing will be instrumented
Library versions#
Versions 1.x.y of the library are meant to target Spring Boot 2.x while versions 0.x.y are meant to be used with Spring Boot 1.5
Configuration#
// pom.xml
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
</dependency>
for simple instrumentation of the request.
or
// pom.xml
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
</dependency>
if you need to instrument the following application
- Spring Web (RestControllers, RestTemplates, WebAsyncTask, WebClient, WebFlux)
- @Async, @Scheduled, Executors
- WebSocket STOMP
- Feign, HystrixFeign
- Hystrix
- JMS
- JDBC
- Kafka
- Mongo
- Zuul
- Reactor
- RxJava
- Redis
- Standard logging - logs are added to active span
- Spring Messaging - trace messages being sent through Messaging Channels
- RabbitMQ
Either dependency will ensure that Spring Boot will auto configure a Jaeger implementation of OpenTracing's Tracer
when the application starts.
If no settings are changed, spans will be reported to the UDP port 6831
of localhost
.
The simplest way to change this behavior is to set the following properties:
opentracing.jaeger.udp-sender.host=jaegerhost
opentracing.jaeger.udp-sender.port=portNumber
for the UDP sender, or use an HTTP sender by setting the following property:
opentracing.jaeger.http-sender.url = http://jaegerhost:portNumber/api/traces
// src/main/resource/application.properties
opentracing.jaeger.udp-sender.host=jaeger
opentracing.jaeger.udp-sender.port=6831
Configuration options#
All the available configuration options can be seen in JaegerConfigurationProperties
.
The prefix to be used for these properties is opentracing.jaeger
.
Furthermore, the service name is configured via the standard Spring Cloud spring.application.name
property.
Beware to use the correct syntax for properties that are camel-case in JaegerConfigurationProperties
.
- For properties / yaml files use
-
. For exampleopentracing.jaeger.log-spans=true
- For environment variables use
_
. For exampleOPENTRACING_JAEGER_LOG_SPANS