今天和大家分享:SpringBoot应用如何快速整合sentry,并将错误日志资讯实时传送到钉钉群。
作为广大Java程序员中的一员,我们在做日常业务开发时候,多多少少都会在程式码里加一些日志资讯,便于后续测试、线上问题排查跟踪。另外,程式码在执行期间多多少少都会报一些始料未及的错误异常,常见的有空指标异常、ClassNotFoundException、IllegalArgumentsException、阵列下标越界等等。我们如何知道你所负责的业务当前有没有错误呢?它的健康状态是怎样的?如果明确知道有错误了,如何能看到错误日志并迅速的定位问题呢?今天就和大家来分享一下如何使用sentry来收集错误日志资讯并实时传送到钉钉群。

Sentry(https://sentry.io)是一款开源的应用实时监控平台。“Stop hoping your users will report errors”是Sentry的理念,即不要期望你的使用者来报告错误。sentry可以采用官网建立team和project,也可以自己安装sentry服务端。本文讲述的是快速的整合sentry,所以采用的是在官网上建立team和project。
下面我们来看看SpringBoot应用如何快速的整合sentry云:
1.登入Sentry官网注册一个个人账户https://sentry.io/signup/,输入姓名、邮箱、组织资讯点选继续即进入账户的管理控制台了,如图所示:
sentry建立一个专案
2.点选上图中的create project建立好专案,走完系统提示的步骤,直接进入专案的管理控制台,找到专案的client keys,我们的应用中整合sentry就靠它了,先记住这个路径。
建立的专案client keys
3.下面开始进入我们的应用整合sentry客户端,先新增好Maven依赖:
sentry依赖
在你的logback.xml中增加sentry的日志收集:
sentry日志配置
在你的专案resources目录下增加一个sentry.properties,内容如下:
#建立的专案的client keys
dsn=https://[email protected]/1498731
#应用的包名
stacktrace.app.packages=com.test.sentry
#上报频率 1是全部都上报
sample.rate=1
#运用环境 dev test gamma prod
environment=dev
还差最后一步,在你的应用启动类里面注册一个bean:
sentry注册bean
启动你的专案,制造一个log.error日志或者丢掷一个异常,去你的sentry控制台去看看有没有吧~如果能收到异常告警,那么错误列表就会有资料:
错误列表
4.以上就是快速的整合sentry,并将错误资讯上报到sentry服务端。接下来的问题是:如何将这个错误资讯实时的传送到钉钉群通知开发人员呢?我们去专案下找一个报警设定:
sentry专案报警设定
有没有看见钉钉?没有~就是没有钉钉,但是他有一个WEBHOOKS,给我们提供了一个钩子,有了钩子就好办事了,那我们就可以写一个小小的中介软件,基本思路就是:当sentry服务端收到错误日志时候给配置的钩子发一条通知,这个钩子接收到告警通知后,把通知再发到钉钉机器人提供的钩子上去,这样不就可以打通sentry和钉钉了么?思路没问题就开始干~
5.写一个简简单单的API,接受sentry的通知并发送到钉钉的机器人钩子上去,大家得先了解一下sentry传送的通知资料格式是什么样的,我一开始懒得找文件,直接用HttpServletRequest接收的,然后打印出来,再根据自己需要的字段资讯,写了一个简单的请求接受类,然后再看看钉钉机器人的文件(这个就比较好找了,钉钉里面设定机器人的时候都告诉你文件地址了),基本就下面这一点点程式码:
API
sentry传送的请求体
传送给钉钉机器人的请求类
6.测试一下效果,制造一个错误日志或者异常资讯,看钉钉能否实时收到告警资讯:

通过以上步骤,大家的应用就算是成功的集成了sentry并实时的将告警资讯通知到钉钉群。上面写的一个简单的中介软件大家也可以根据自己的需求传送到不同的平台,比如简讯啊、邮件啊或者做更多特定需求的处理。另外,由于用的是线上sentry服务端,而不是自己搭建的sentry服务,每个月只有10K的免费使用量,所以只能用于个人学习实验或者量小的业务,对于大型的业务建议自行搭建sentry服务。
对于日志收集实时监控的方案有很多种,sentry应该还属于比较轻量级的整合方案,当然sentry不能完全代替业务监控,业务监控指标有很多,需要共同运用各种各样的工具来监控业务的整体执行状态,才能保证业务正常持续执行。sentry只是对程式错误资讯的一种监控,当然如果我们的业务在sentry的保障下没有一行错误日志、没有一个异常资讯丢掷,那么我想咱们的程式也一定是健康的。





























