Performance Monitoring

Sentry allows you to monitor the performance of your application, showing you how latency in one service may affect another service, and letting you pinpoint exactly which parts of a given operation may be responsible. To do this, it captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services, respectively. You can learn more about this model in our Distributed Tracing docs.

Enabling Tracing

To automatically sending traces you must configure SentryTracingFilter in web.xml for Servlet applications configured with XML, or WebApplicationInitializer for Servlet applications configured with Java code:

Copied
import io.sentry.spring.tracing.SentryTracingFilter;
import javax.servlet.Filter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  // ...
  @Override
  protected Filter[] getServletFilters() {
    return new Filter[] {new SentryTracingFilter()};
  }
}

Next, you must choose one of two options to configure sampling:

  • Set a uniform sample rate for all transactions, by setting the traces-sample-rate option in your SDK config to a number between 0 and 1. (For example, to send 20% of transactions, set traces-sample-rate to 0.2.)
  • Control the sample rate dynamically, based on the transaction itself and the context in which it's captured, by providing a function to the traces-sampler config option.

Or alternatively:

Configure sample rate in sentry.properties:

Copied
traces-sample-rate=0.3

Or through providing a bean of type SentryOptions#TracesSamplerCallback:

Copied
import io.sentry.SentryOptions.TracesSamplerCallback;
import io.sentry.SamplingContext;
import org.springframework.stereotype.Component;

@Component
class CustomTracesSamplerCallback implements TracesSamplerCallback {
    @Override
    public Double sample(SamplingContext samplingContext) {
        // return a number between 0 and 1
    }
}

If either of these options is set, tracing will be enabled in your app, and transactions will start getting captured automatically. (The two options are meant to be mutually exclusive, but if you do set both, traces-sampler will take precedence.)

As you're getting tracing set up, we recommend setting traces-sample-rate to 1, so all created transactions are sent to Sentry. Once you're done with testing, though, you'll probably want to consider either lowering your traces-sample-rate value, or switching to traces-sampler, which will allow you to set the sample rate individually for each transaction. Without sampling, automatically-captured transactions can add up quickly. (The Spring integration, for example, will send a transaction for every request made to the server.) Sampling allows you to send representative data without overwhelming either your system or your Sentry transaction quota.

You can learn more about the traces-sample-rate and traces-sampler options in Sampling Transactions.

Using High-Throughput Transport

For high traffic applications we recommend using high-throughput HTTP transport based on Apache HTTP Client 5. Add following dependency sentry-apache-http-client-5:

Copied
<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-apache-http-client-5</artifactId>
    <version>4.0.0</version>
</dependency>

Define the bean, which will be automatically used by Sentry SDK:

Copied
import org.springframework.context.annotation.Bean;
import io.sentry.transport.apache.ApacheHttpClientTransportFactory;

@Bean
public ApacheHttpClientTransportFactory apacheHttpClientTransportFactory() {
    return new ApacheHttpClientTransportFactory();
}
You can edit this page on GitHub.