Sentry介绍
无论测试如何完善的程序,bug总是免不了会存在的,有些bug不是每次都会出现,测试时运行好好的代码可能在某个用户使用时就歇菜了,可是当程序在用户面前崩溃时,你是看不到错误的,当然你会说:”Hey, 我有记日志呢”。 但是说实话,程序每天每时都在产生大量的日志,而且分布在各个服务器上,并且如果你有多个服务在维护的话,日志的数量之多你是看不过来的吧。等到某天某个用户实在受不了了,打电话来咆哮的时候,你再去找日志你又会发现日志其实没什么用:缺少上下文,不知道用户什么操作导致的异常,异常太多(从不看日志的缘故)不知如何下手 等等。
Sentry就是来帮我们解决这个问题的,它是一款精致的Django应用,目的在于帮助开发人员从散落在多个不同服务器上毫无头绪的日志文件里发掘活跃的异常,继而找到潜在的臭虫。
Sentry是一个日志平台, 它分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web节目方便查看。Sentry由python编写,源码开放,性能卓越,易于扩展,目前著名的用户有Disqus, Path, mozilla, Pinterest等。
官方文档
maven依赖
如果是与spring项目集成引入以下架包即可,这里不用在额外添加日志
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>1.7.3</version>
</dependency>
Sentry注册和创建组织
首先打开Sentry 的官网,并且进行一系列的注册,创建一个组织,这里我创建一个组织,命名叫做Test
然后创建项目
注意:创建完项目完成后,此时会有一个DSN,这个是非常重要的,因为当Sentry 监控到异常的时候,会通过这个地址发送一些异常的消息,当然也可以认为是一个密钥
这个时候就可以看一下官网给的一些Demo, 因为我们使用的是Java,所以我们直接点击下面的按钮就好了:
此时就可以看到官网给出的很多demo,比如我们可以看到有基于Android 的异常demo等等。但是注意,这里是没有关于SpringBoot 的Demo 的,那么我们就可以直接店家Full Decumentation 进入到最全的文档中。
那么这个时候我们就可以看到左边的目录里面包含了最全的文档和案例,但是这里写的关于Spring 集成的觉得写的不详细:
注意,这个时候可以选中一下Java 的Config 看一下,这个时候的DSN 也就派上用场了,这个时候他会告诉你dsn 的格式是类似于下面这样的,因为我是放在了Spring Boot 里面进行启动的,所以肯定是放在代码里面进行执行的,如下图所示(当然了,也可以使用maven 执行启动的方式执行等等):
@Configuration
public class SentryConfig {
@Bean
public HandlerExceptionResolver sentryExceptionResolver() {
return new SentryExceptionResolver();
}
@Bean
public ServletContextInitializer sentryServletContextInitializer() {
return new SentryServletContextInitializer();
}
@PostConstruct
public void init(){
Sentry.init("https://8ea1ff8915c947d7a60ba587013e70be:20080002372343979b0144c671b4c575@sentry.io/1535646");
}
}
https://github.com/wangyuanchen/SentryDemo
Sentry报警规则配置
第一步:进行各自team组
第二步:找到需要进行设置的项目
第三步:进入报警规则设置页
第四步:设置报警目标环境或其他设置
微服务接入
- copy sentryConfig.java
- pom 依赖:
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>1.7.3</version>
</dependency>
- yml 增加配置:
#sentry dsn配置
sentry:
https://1a2c1466456046b0be63e8d9923f3689@sentry.peanut.ai/18 - log4j2配置文件添加:
<appender>
<!--sentry异常监控-->
<Sentry name="Sentry" />
<appender>
<Root>
<Root level="INFO">
<AppenderRef ref="rootAppender" />
<AppenderRef ref="Console"/>
<appender-ref ref="Sentry" level="WARN" />
</Root>
<logger name="ai.peanut.bdagent" level="DEBUG" additivity="true">
<appender-ref ref="applicationAppender"/>
<appender-ref ref="Sentry" level="WARN" />
</logger>