一、sentry介绍
当我们完成一个业务系统的上线时,总是要观察线上的运行情况,对于每一个项目,我们都没办法保证代码零BUG、零报错,即便是经历过测试,因为测试永远无法做到100%覆盖,用户也不会总是按照我们所预期的进行操作,在上线后也会出现一些你预料不到的问题,而这种情况下,广大的用户其实才是最好的测试者。当生产环境中产生了一个 bug 时,如何做到迅速报警,找到问题原因,修复后又如何在线上验证?此时我们需要一个高效的错误监控系统。sentry扮演着一个错误收集的角色,将你的项目和sentry结合起来,无论谁在项目使用中报错,sentry都会第一次时间通知开发者,我们需要在系统异常时主动对其进行收集上报,出现了什么错误,错误出现在哪,帮你记录错误,以制定解决方案并进行优化迭代。
二、sentry的安装,这里介绍docker 安装sentry
1.启动一个redis容器
docker run -d --name sentry-redis redis
2.启动一个Postgres容器
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
3.生成一个秘钥,用于后面所有sentry容器的握手
docker run --rm sentry config generate-secret-key
4.连接redis,postgres和sentry,运行后自动执行初始化操作
docker run -it --rm -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
此处需要创建账号和密码,也可以不创建,运行命令
#进入容器内部
docker exec -it my-sentry /bin/sh
#创建用户
sentry createuser
5.启动Sentry server
docker run -d --name my-sentry -p 9000:9000 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry
6.默认配置中需要Celery,因此启动一个Celery主节点与执行节点(worker节点可按需多启几个
#主节点
docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron
#工作节点
docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker
7.访问http://ip:9000进入sentry web管理页面
三、sentry 创建项目
1.点击添加项目按钮
2.选择项目编程语言类型,填写项目名,分配给哪个team等信息,然后点击Create Project按钮创建项目。
3. 创建auth token
4.选择token生效范围,点击Create Token创建token
三、Gitlab中启用Error Tracking
1.勾选Active
2.填入Sentry API URL即为sentry 服务器的地址加端口
3.Auth token即为生成的token,点击Connect,然后选择要监控的项目,最后保存
四、查看监控的结果
现在还是空白的,因为项目中没有使用到Sentry,所以没有结果
五、创建SpringBoot项目
1.添加依赖到pom.xml文件
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>1.7.30</version>
</dependency>
2.编写配置文件,在resources目录下创建sentry.properties文件,写入dns配置
dns=http://fbb138025aae4bfeae0aef8xxxx9796c@192.168.xx.xx:9020/3
dsn信息要在sentry后台,你创建的那个项目下可以找到
3.编写配置类
@Configuration
public class SentryConfig {
@Bean
public HandlerExceptionResolver sentryExceptionResolver() {
return new io.sentry.spring.SentryExceptionResolver();
}
@Bean
public ServletContextInitializer sentryServletContextInitializer() {
return new io.sentry.spring.SentryServletContextInitializer();
}
}
4.编写几个异常的代码,用来做测试
@GetMapping
public void index() {
throw new NullPointerException();
}
@GetMapping(value = "/user")
public void getUser() {
throw new IndexOutOfBoundsException("user size=10,req=11");
}
六、启动项目,测试
1.发送请求
2.查看sentry后台
3.查看Gitlab Error Tracking
好了,就介绍到这里了,总体来说还是挺简单的,快去学学吧。