Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
September 28, 2021 06:02 pm GMT

Adding Sentry to Spring Boot Securely

Observability.

When I started working with the microservices at my job about 4 months ago, there were numerous ways to know a bug made it to production.

Slack alerts. Cloudwatch logs. Production support.

There was no aggregation of errors and alerting.

I had never used Sentry, but heard a lot about it over the last couple of years. It seemed like a reasonable solution to this problem.

Other folks at my job agreed we should try it. Here's what it took to integrate.

Requirements

To understand fully what's going on in each of the services, it made sense to capture EVERYTHING, at least at first. This meant uncaught and caught exceptions, including the ones already caught by any @ExceptionHandlers.

We also wanted to keep any secrets out of our code and in AWS Secrets Manager.

Follow The Instructions

I found vast documentation on Sentry's Spring Boot docs pages. However, there wasn't a solution that let us store the DSN securely, outside the source.

My Solution

To store the DSN elsewhere and pull it in at runtime, I used the AWS Secrets Manager SDK. Here's a decent tutorial from AWS on how to get that setup. Now let's focus on the Sentry part.

Code

Combining the documentation from Sentry and the slightly different requirements we had, I created a Spring configuration that provides a Sentry OptionsConfiguration bean:

@[email protected]<SentryOptions> sentryOptionsConfiguration() {    return options -> {        SentryProperties properties = (SentryProperties) options;        properties.setDsn(secretService.getSentrySecret().getDsn());        properties.setEnvironment(activeProfile);        properties.setDebug(true);        properties.setExceptionResolverOrder(Ordered.HIGHEST_PRECEDENCE);    };}

Because Sentry provides an OptionsConfiguration themselves, I used @Primary to ensure mine took precedence.

I used the Spring profile name to set the environment; for example, QA.

To make sure we see all handled errors, I set the exception resolver order to Ordered.HIGHEST_PRECEDENCE.

Properties

I thought the code changes would be enough. I was wrong.

Turns out Sentry requires the property sentry.dsn to be set to something or the Sentry bootstrap fails when the Spring application context is built.

The solution:

sentry.dsn=dummy in my application.properties file

Summary

Sentry is an extremely useful tool that has a friendly and clear interface. We use it to see production issues and have more context of issues reported by our QA team.

With these small tweaks, we are able to get the data we need to resolve errors fast.


Original Link: https://dev.to/jeffreyfate/adding-sentry-to-spring-boot-securely-52fl

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To