Sentry 是开发者优先的应用监控平台,不仅仅提供错误日志,还对错误堆栈进行捕获。支持很多的语言平台、前端项目、后端项目都可以使用 Sentry 进行监控。
Sentry 除了使用在线提供的服务外,还 可以自己部署 Sentry
自己部署 docker
可以自己部署 Sentry 官方文档,可以查看,这里简单讲解下如何自己部署
在 https://github.com/getsentry/self-hosted 官方仓库 的 releases 页面 https://github.com/getsentry/self-hosted/releases/tag/22.7.0
下载发布的压缩包
解压后进入该目录运行 ./install.sh
上一步完成之后启动 Sentry docker-compose up -d
在部署过程有需要耐心等待因为大概会启动 30 个左右的容器,完全启动完成之后,就可以访问了 http://127.0.0.1:9000/
第一次访问页面,会提示你设置账户等信息,登录后可以在头像的下拉选项中选择 User Setting 设置为中文界面
如何接入 Spring-boot 程序
Spring-boot 接入 Sentry 官方文档 可以先去看看,不过在创建的新项目里面也有接入文档,这里简单的记录下
创建一个 Spring-boot 的项目,写上项目名称
创建成功之后,就会自动跳转到引导配置页面
该页面有添加依赖,接入该 sentry 项目的 yaml 等配置,在文档末尾还有如何测试发送事件到 Sentry。这些都比较简单,如果不小心管了这个页面,打开项目如果没有事件的话,还有安装指引可以到达上面的页面
另外项目的右上角那个齿轮按钮里面也可以找到 SKD 安装一栏,选择对应的项目,就能接入进来了
其实上面的配置接入只能捕获到你程序未处理的异常,比如抛出了一个空指针,你程序没有处理,那么就会被 Sentry 自动捕获并发送到配置的 Sentry 项目上,如果你自己捕获了,使用日志输出,就不会被 Sentry 捕获,这种情况就要用到日志功能,与 日志框架集成
下面是默认集成和 logback 日志框架集成的例子:
implementation 'io.sentry:sentry-spring-boot-starter:6.1.0'
implementation 'io.sentry:sentry-logback:6.1.0'
配置文件
sentry:
dsn: sentry 项目地址
# Set traces-sample-rate to 1.0 to capture 100% of transactions for performance monitoring.
# We recommend adjusting this value in production.
traces-sample-rate: 1.0
# 开启日志集成
logging:
enabled: true
sentry:
# 配置环境,比如你线上线下用同一个 sentry 项目的话,就可以通过这个来配置,就相当于是一个标签,能区分就行
environment: dev
上面的配置完成后,你就默认拥有了:
- 程序未处理的异常会被捕获
- 日志打印的 error 会被捕获
上面仅仅是最小的工作模式,还有其他方式后续深入使用后,再记录。
上报的错误如下所示,可以选择看哪个环境的
如果你的日志信息打印了异常的堆栈信息,点击这里问题进去看详情的话,也能看到堆栈信息。
使用感受
目前只按照上面的方式接入了 SpringBoot 程序,本想着应该没有太大的作用,运行一周后,还真的发型了几个问题:
- NPE 问题,一些代码对于 NPE 来说确实有点难预见,问题原因可能很简单,就是容易被忽略,已经上报了好几个 NPE 问题,而且还有一个面包屑(breadcrumbs)功能,在发生该问题之前的事件跟踪,这个目前我还没有发现他的一个原理是什么,但是从使用表现上来看,它会将数据库执行的事物事件、或则 HTTP 访问的请求事件、或则该问题发生前有打印日志,会把这些都记录下来,查找问题的时候如果是在前面打印了日志的话,就非常方便了