Spring Boot 配置集成 Sentry

这是一个快速开始的指南,如果想了解更多把 Sentry 集成到 Spring Boot 的方法 ,请参阅官方完整文档。
Sentry 集成到 Spring Boot 需要 Spring Boot 2.1.0 及以上版本以报告未处理的异常以及 Bean 的发布和注册。如果使用低>版本的 Spring Boot,则参考官方旧版本集成文档

安装需要 Maven 或者 Gradle

Maven

1
2
3
4
5
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring-boot-starter</artifactId>
<version>5.4.2</version>
</dependency>

Gradle

1
implementation 'io.sentry:sentry-spring-boot-starter:5.4.2'

配置

打开 src/main/application.properties (或者 src/main/application.yml) 并配置 DSN, 或者其他可用设置 :

修改 src/main/application.properties:

1
2
3
4
sentry.dsn=[监控平台自动生成的链接]
# 设置 traces-sample-rate 为 1.0 以捕获全部事务来进行性能监视
# 建议在生产模式下调整此值
sentry.traces-sample-rate=1.0

或者,修改 src/main/application.yml:

1
2
3
sentry:
dsn: [监控平台自动生成的链接]
traces-sample-rate: 1.0

如果使用了 Logback 作为日志管理器,则还需要配置以把日志输出给 Sentry。在 Maven 或者 Gradle 中增加 sentry-logback 的依赖。Sentry 的 Spring Boot 启动器将自动配置 SentryAppender.

Maven

1
2
3
4
5
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-logback</artifactId>
<version>5.4.2</version>
</dependency>

Gradle

1
implementation 'io.sentry:sentry-logback:5.4.2'

验证

接下来故意生成一个错误,验证一下是否配置完全:

未配置全局异常捕获时,直接 throw 异常不会上报到sentry

Java

1
2
3
4
5
6
7
8
9
import java.lang.Exception;
import io.sentry.Sentry;

try {
throw new Exception("This is a test.");
} catch (Exception e) {
log.error(e);
Sentry.captureException(e);
}

Kotlin

1
2
3
4
5
6
7
8
import java.lang.Exception
import io.sentry.Sentry

try {
throw Exception("This is a test.")
} catch (e: Exception) {
Sentry.captureException(e)
}

错误提醒需要提前配置好邮件,并且启用邮件系统

性能监控

每一个接收到的Spring MVC HTTP 请求都会自动被转为一个事务。通过 @SentrySpan注解来创建 Bean 类的方法的span:

Java

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.stereotype.Component;
import io.sentry.spring.tracing.SentrySpan;

@Component
class PersonService {

@SentrySpan
Person findById(Long id) {
...
}
}

Kotlin

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.stereotype.Component
import io.sentry.spring.tracing.SentrySpan

@Component
class PersonService {

@SentrySpan(operation = "task")
fun findById(id: Long): Person {
...
}
}

更多 API 及集成说明请参阅 官方文档