今天和大家分享:SpringBoot应用如何快速集成sentry,并将错误日志信息实时发送到钉钉群。
作为广大Java程序员中的一员,我们在做日常业务开发时候,多多少少都会在代码里加一些日志信息,便于后续测试、线上问题排查跟踪。另外,代码在运行期间多多少少都会报一些始料未及的错误异常,常见的有空指针异常、ClassNotFoundException、IllegalArgumentsException、数组下标越界等等。我们如何知道你所负责的业务当前有没有错误呢?它的健康状态是怎样的?如果明确知道有错误了,如何能看到错误日志并迅速的定位问题呢?
今天就和大家来分享一下如何使用sentry来收集错误日志信息并实时发送到钉钉群。
![6bd12680f52415a53fc57e7949e0030a.png](https://i-blog.csdnimg.cn/blog_migrate/93d973caa04f6f32a8e1f19eddd776a0.jpeg)
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/,输入姓名、邮箱、组织信息点击继续即进入账户的管理控制台了,如图所示:
![7a5bea0ac22b8a9166122532acaaca88.png](https://i-blog.csdnimg.cn/blog_migrate/37cd2904815b67ac7264daf59cf7201e.jpeg)
sentry创建一个项目
2.点击上图中的create project创建好项目,走完系统提示的步骤,直接进入项目的管理控制台,找到项目的client keys,我们的应用中集成sentry就靠它了,先记住这个路径。
![035f75be48f769e3f301581e613b9881.png](https://i-blog.csdnimg.cn/blog_migrate/183dcad00d1572f76751e91866603d83.jpeg)
创建的项目client keys
3.下面开始进入我们的应用集成sentry客户端,先添加好Maven依赖:
![f04d1822811067d04d46d4bcff2df5ed.png](https://i-blog.csdnimg.cn/blog_migrate/82a603d825b0283f843fabccccd3e58f.jpeg)
sentry依赖
在你的logback.xml中增加sentry的日志收集:
![7d3fc71135f1d810f01a1fd1a8a3e423.png](https://i-blog.csdnimg.cn/blog_migrate/361008b390db6fd44cd45f2f155713f3.jpeg)
sentry日志配置
在你的项目resources目录下增加一个sentry.properties,内容如下:
#创建的项目的client keysdsn=https://f6881f52ad5e49c885c6c55d9af88668@sentry.io/1498731#应用的包名stacktrace.app.packages=com.test.sentry#上报频率 1是全部都上报sample.rate=1#运用环境 dev test gamma prodenvironment=dev
还差最后一步,在你的应用启动类里面注册一个bean:
![4bd32b7f841106c27eaf7b33ca5cc853.png](https://i-blog.csdnimg.cn/blog_migrate/25823633bbf8854974e6012ccfcdb459.jpeg)
sentry注册bean
启动你的项目,制造一个log.error日志或者抛出一个异常,去你的sentry控制台去看看有没有吧~如果能收到异常告警,那么错误列表就会有数据:
![3003b9e1543717be2ebb8573a52a8dd2.png](https://i-blog.csdnimg.cn/blog_migrate/52c57c9c926e7f9241a4c12e49d7235f.jpeg)
错误列表
4.以上就是快速的集成sentry,并将错误信息上报到sentry服务端。接下来的问题是:如何将这个错误信息实时的发送到钉钉群通知开发人员呢?我们去项目下找一个报警设置:
![4cbf1dbbcd0a0b08e55b87753152a6e3.png](https://i-blog.csdnimg.cn/blog_migrate/8f61e4f4284e28c28e2d470343a523ad.jpeg)
sentry项目报警设置
有没有看见钉钉?没有~就是没有钉钉,但是他有一个WEBHOOKS,给我们提供了一个钩子,有了钩子就好办事了,那我们就可以写一个小小的中间件,基本思路就是:当sentry服务端收到错误日志时候给配置的钩子发一条通知,这个钩子接收到告警通知后,把通知再发到钉钉机器人提供的钩子上去,这样不就可以打通sentry和钉钉了么?思路没问题就开始干~
5.写一个简简单单的API,接受sentry的通知并发送到钉钉的机器人钩子上去,大家得先了解一下sentry发送的通知数据格式是什么样的,我一开始懒得找文档,直接用HttpServletRequest接收的,然后打印出来,再根据自己需要的字段信息,写了一个简单的请求接受类,然后再看看钉钉机器人的文档(这个就比较好找了,钉钉里面设置机器人的时候都告诉你文档地址了),基本就下面这一点点代码:
![ef338363aa9ad424817264fd3866b7fc.png](https://i-blog.csdnimg.cn/blog_migrate/3ea6a22b71b456c769408306b550f38c.jpeg)
API
![dab6ffbe5cc6e59e969da1ea058a223b.png](https://i-blog.csdnimg.cn/blog_migrate/2095b51eb5eda870863bc627932234f3.jpeg)
sentry发送的请求体
![91e4995c6c983a77e45492b056a3092f.png](https://i-blog.csdnimg.cn/blog_migrate/2af16a8b729c5e2fbcab895014ba28eb.jpeg)
发送给钉钉机器人的请求类
6.测试一下效果,制造一个错误日志或者异常信息,看钉钉能否实时收到告警信息:
![b0efe377cc2c434aa952d7fdb634595d.png](https://i-blog.csdnimg.cn/blog_migrate/1c3cbf96dac27ae90df7a957bce67d71.jpeg)
通过以上步骤,大家的应用就算是成功的集成了sentry并实时的将告警信息通知到钉钉群。上面写的一个简单的中间件大家也可以根据自己的需求发送到不同的平台,比如短信啊、邮件啊或者做更多特定需求的处理。另外,由于用的是在线sentry服务端,而不是自己搭建的sentry服务,每个月只有10K的免费使用量,所以只能用于个人学习实验或者量小的业务,对于大型的业务建议自行搭建sentry服务。
对于日志收集实时监控的方案有很多种,sentry应该还属于比较轻量级的集成方案,当然sentry不能完全代替业务监控,业务监控指标有很多,需要共同运用各种各样的工具来监控业务的整体运行状态,才能保证业务正常持续运行。sentry只是对程序错误信息的一种监控,当然如果我们的业务在sentry的保障下没有一行错误日志、没有一个异常信息抛出,那么我想咱们的程序也一定是健康的。