[笔记]使用 sentry

sentry 介绍

sentry 是一个很流行的错误监控工具. 它能很好的监听线上异常以及开发者手动抛出的错误并记录.

除了官方提供的 sentry.io 外, 也支持自己部署 (Sentry 简易搭建指南), 适用于安全性有所要求的项目.

sentry 的界面看起来十分高大上. Issues 界面可以看到所有网站中抛出的异常(及开发者想记录的信息) 相同内容的记录会合并在一起并记录触发次数, 避免被某一个问题刷屏的情况. 也可以像 GitHub 的 issue 一样 assign 给相应的开发者处理. 并且 sentry 也支持邮寄和各种 IM 的 robot, 十分好用.

release

代码的不同版本, 会对应不同的 bug, sentry 中用 release 来标识一个代码包的当前版本. 理论上不同代码包应该对应一个唯一性的 release version

价格

自搭不谈, sentry.io 的服务我觉得还是很亲民的, 免费用户也提供了每月 10,000 次的 events 记录, 不过免费用户不提供多人共享一个项目, 并且events 的保存时间也比较有限.

sentry 配置

想使用 sentry 首先要在 sentry.io (或是自建服务)上注册一个项目. 项目注册后会得到一个类似下面这样的 url

1
https://abcdefghijklmn@sentry.io/12345

用来作为监控的来源识别

参考官方文档, 使用 sentry 需要引入其 sdk 脚本文件 ravenjs.

可以通过静态脚本引入

1
<script src="https://cdn.ravenjs.com/3.19.1/raven.min.js" crossorigin="anonymous"></script>

也可以用 npm 等包管理软件引入 npm install raven-js

加载 raven 后, 配置和之前注册项目的关联

1
2
3
4
5
6
Raven
.config('https://abcdefghijklmn@sentry.io/12345', {
release: 'your release',
// and more config
})
.install();

这里的 release 可以是任意字符串, 用于识别当前的代码的构建版本. 建议 webpack 每次打包时生成一个唯一的 release 号, 如使用项目 hash, git commit 或者简单的时间字符串等.

解决 sourcemap

处于保密考虑, 一般生产环境不会提供 sourcemap. 这样 js 抛出的错误信息对开发人员很不友好. 我们可以将 sourcemap 传到 sentry 上来解决这个问题.

官方提供了一套 API 接口 可以向指定的 release 上传文件. 这里推荐一个更简单的实现:

通过 webpack-sentry-plugin 插件在 webpack 构建时完成阶段直接将制定规则的文件同步到 sentry 上:

1
2
3
4
5
6
plugins.push(new SentryPlugin({                                                                  
organization: 'ekoneko',
project: 'test',
apiKey: '......',
release: '',
}))

配置前, 还需要前往 sentry.io/api/ 生成一个 apiKey

自动向 github 添加 issue

首先, 需要在 sentry 上关联 github 的 sso 登录.

完成后在项目页面 -> Project Settings -> All Integrations 中找到 Github, 点击下方 Configure plugin 链接配置 repo 地址后点击 Enable Plugin 按钮即可.