Automatic Instrumentation

Sentry Spring integration, once enabled, captures each incoming Spring MVC HTTP request and turns it into a transaction with SentryTracingFilter. Transaction names follow pattern <HTTP method> <Spring MVC route>, for example for a request to a following controller:

Copied
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@RestController
class HelloController {

  @GetMapping("/person/{id}")
  Person person(@PathVariable Long id) {
    ...
  }
}

Each sampled request executed by this controller method will be turned into a transaction GET /person/{id}.

Sentry Spring integration provides SentrySpanClientHttpRequestInterceptor that creates a span for each outgoing HTTP request executed with a RestTemplate. To use instrumented RestTemplate make sure to set interceptor on the RestTemplate bean:

Copied
import io.sentry.IHub;
import io.sentry.spring.tracing.SentrySpanClientHttpRequestInterceptor;
import java.util.Collections;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriTemplateHandler;

@Configuration
class AppConfig {

  @Bean
  RestTemplate restTemplate(IHub hub) {
    RestTemplate restTemplate = new RestTemplate();
    SentrySpanClientHttpRequestInterceptor sentryRestTemplateInterceptor =
        new SentrySpanClientHttpRequestInterceptor(hub);
    restTemplate.setInterceptors(Collections.singletonList(sentryRestTemplateInterceptor));
    return restTemplate;
  }
}
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").