Annotations
For most users, the out-of-the-box instrumentation is completely sufficient and nothing more has to be done. Sometimes, however, users wish to create spans for their own custom code without needing to make many code changes.
If you add the WithSpan
annotation to a method, the method is wrapped in a
span. The SpanAttribute
annotation allows you to capture the method arguments
as attributes.
package otel;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.annotations.SpanAttribute;
import io.opentelemetry.instrumentation.annotations.WithSpan;
import org.springframework.stereotype.Component;
/** Test WithSpan */
@Component
public class TracedClass {
@WithSpan
public void tracedMethod() {}
@WithSpan(value = "span name")
public void tracedMethodWithName() {
Span currentSpan = Span.current();
currentSpan.addEvent("ADD EVENT TO tracedMethodWithName SPAN");
currentSpan.setAttribute("isTestAttribute", true);
}
@WithSpan(kind = SpanKind.CLIENT)
public void tracedClientSpan() {}
public void tracedMethodWithAttribute(@SpanAttribute("attributeName") String parameter) {}
}
Note
The OpenTelemetry annotations use Spring AOP based on proxys.
These annotations work only for the methods of the proxy. You can learn more in the Spring documentation.
In the following example, the WithSpan
annotation won’t do anything when the
GET endpoint is called:
@RestController
public class MyControllerManagedBySpring {
@GetMapping("/ping")
public void aMethod() {
anotherMethod();
}
@WithSpan
public void anotherMethod() {
}
}
Note
To be able to use the OpenTelemetry annotations, you have to add the Spring Boot Starter AOP dependency to your project:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
dependencies {
implementation("org.springframework.boot:spring-boot-starter-aop")
}
You can disable the OpenTelemetry annotations by setting the
otel.instrumentation.annotations.enabled
property to false
.
You can customize the span by using the elements of the WithSpan
annotation:
Name | Type | Description | Default Value |
---|---|---|---|
value | String | Span name | ClassName.Method |
kind | SpanKind | Span kind of the span | SpanKind.INTERNAL |
You can set the attribute name from the value
element of the SpanAttribute
annotation:
Name | Type | Description | Default Value |
---|---|---|---|
value | String | Attribute name | Method parameter name |
[i18n] feedback_title
[i18n] feedback_question
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!