异常监控之 sentry 实践
sentry 是一个日志平台,分为客户端和服务端,客户端(目前客户端有Python, PHP, C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常.。它专门用于监视错误和提取执行适当的事后操作所需的所有信息, 而无需使用标准用户反馈循环的任何麻烦。
这个是主页面

首先我们先注册登录一下, 接着创建一下项目生成 token. 点击头像左下角,选择API,生成token,勾选project:write权限

基础配置
安装 sentry 对应的命令行管理工具 sentry-cli
npm i -g @sentry/cli
sentry-cli -V // 检查版本
安装好之后可以登录
sentry-cli login
输入一下命令配置
vi /Users/sjh/.sentryclirc

上传 source map
接着配置 sentry-cli releases files test004 upload-sourcemaps --url-prefix 'http://172.18.8.33:5000/static/js' './build/static/js/'
成功的话会出现这个

如果出现 error: project not found 可以输入一下命令
sentry-cli info
这是我们配置的详细信息, 可以对一下是否写错
sentry-cli projects list
查看下项目的对应名称是否输错
2)清空 SourceMap 文件
sentry-cli releases files staging@1.0.1 delete --all
上传成功后我们可以在页面看到这个

release控制
创建release
sentry-cli releases -o 组织 -p 项目 new staging@1.0.1
# 这里的 staging@1.0.1 就是我们指定的版本号.
# -o -p可以通过页面左上角可以看到。现在我们可以通过创建多个版本号来进行异常分类。 同时,也可以通过页面中"Releases"查看是否创建成功
本地应用release
# 安装raven - js
npm install raven - js--save
# 回到前端项目中, 在config添加对应的release, 指定版本后, 每次上报的异常就会分类到该版本下。
import Raven from 'raven-js';
Raven.config(DSN, {
release: 'staging@1.0.1'
}).install()
删除release
sentry-cli releases -o 组织 -p 项目 delete staging@1.0.1
# 注意 删除某个release时需要将其下的异常处理掉,并将该版本的sourcemap文件清空
# 完成上面两步可能还要等待2小时才能删除,不然会报错:该版本还有其它依赖。
vue
import * as Sentry from '@sentry/browser';
d;
Sentry.init({
dsn: 'https://3ab8eff44adc41bdb4b7b3abeb9af39e@o209216.ingest.sentry.io/5304337',
integrations: [new VueIntegration({
Vue,
attachProps: true
})],
});
Vue.prototype.Sentry = Sentry // 在捕获错误的界面需要用到Sentry
接着在 webpack 中配置
configureWebpack: {
plugins: [
new SentryCliPlugin({
include: "../game-developer-web/src/main/webapp/resources/dist", // 作用的文件夹(打包好的文件夹)
release: process.env.RELEASE_VERSION, // 版本号
configFile: "sentry.properties",
ignore: ['node_modules'],
urlPrefix: "../game-developer-web/src/main/webapp/resources/dist" // 线上项目的文件夹名
})
]
}

react
对应的 react 项目配置很简单
在 index.js 引入
import * as serviceWorker from './serviceWorker';
import * as Sentry from '@sentry/browser';
Sentry.init({
release: 'test004',
dsn: "https://b0e87f818a464f319892f9c0eeb5e39e@o209216.ingest.sentry.io/5303156",
release: 'test004',
beforeSend(event, hint) {
// Check if it is an exception, and if so, show the report dialog
if (event.exception) {
Sentry.showReportDialog({
eventId: event.event_id
});
}
return event;
}
});
最后更新于
这有帮助吗?