nuxt 项目使用sentry

2,886 阅读4分钟

项目背景

cst群友们之前在群里讨论sentry的匹配问题,自己不懂,就去找了一下是个什么东西。找了之后发现是个日志监控系统,自己以前也想弄一个,但是碍于多种原因,只实现了一个简易版的,功能没有sentry这么全,后来就废弃掉了这个项目。 目前公司内部,在前端并没有一个日志监控的系统,线上报错也不知道,只能通过测试测bug,然后修,有些线上问题就不太清楚。所以,打算弄一个前端日志监控的系统,鉴于群友们对sentry有了解,就打算用这个了。

sentry 部署

部署详细文档后续补上,有几个大坑要记录一下

  • 不能用window下的ubuntu 部署,那是个阉割版的ubuntu,功能不全。我自己安装了一个ubuntu系统来弄
  • 安装ubuntu的时候要给主分区分多点空间 分配个20G就差不多了

新建一个sentry项目

  1. 点击右上角的创建project

image.png

  1. 输入vue搜索,选择vue项目
    image.png
    image.png
  2. 点击创建project 就可以创建好一个项目。
  3. 记录下当前的dsn地址 待会会用到
    image.png
    项目创建完成

nuxt项目内引入sentry

网上找到一个nuxt下用的sentry库--@nuxtjs/sentry,直接使用就好。

  1. 引入@nuxtjs/sentry库
yarn add @nuxtjs/sentry -D
#或者
npm install @nuxtjs/sentry --save-dev
  1. 在nuxt配置文件加入@nuxtjs/sentry
// nuxt.config.js
export nuxtCOndig = {
		// **** 省略其他配置
  	  modules: [
      '@nuxtjs/sentry',
    ],

    sentry: {
      dsn: '', // 创建完项目获取的dsn地址填入这里就好
      config: {}, // Additional config
    }
}
  1. 然后运行项目就可以测试了,我写了一小段代码抛出一个错误 #如何在本地测试生产环境项目,可以看另外一篇文章
setTimeout(function(){
	var a=undefined;
  a.b = "type error"
}, 1000);
  1. 触发了这个错误就会想sentry上报
    image.png
  2. 在管理端查看日志 Project=>(项目名称)-> issue 就可以查看到日志

image.png
但是这是经过压缩的,并不知道具体的代码是什么,于是我们需要把sourcemap上传到sentry当中

上传sourcemap

上传sourcemap 现在也有现成的插件可以使用,有两个插件可以使用:

  • @sentry/webpack-plugin
  • webpack-sentry-plugin

这两个插件的主要区别在于后一个插件可以在上传之后讲sourcemap文件删除,因为我一开始是用@sentry/webpack-plugin的 所以我采用@sentry/webpack-plugin这个插件。后续通过命令行删除sourcemap。

  1. 安装@sentry/webpack-plugin插件, 一般会同时安装@sentry/cli
yarn add @sentry/cli -D
yarn add @sentry/webpack-plugin -D
  1. 根目录创建.sentryclirc文件
# vim .sentryclirc

[defaults]
# 这边是sentry的地址 比如说我在本地启动的服务
url = http://127.0.0.1:9000/ 
org = sentry
# 刚才创建的项目名字
project = vue

[auth]
# 身份令牌 在sentry服务端 setting-》accout->api->auth Tokens 创建一个新的就好
# 注意这里要有project:write 权限 下面我会给出具体页面,看着上面路径进去就好。
token = your token

image.png

  1. 在nuxt.config.js 文件里面加入这个插件
// nuxt.config.js
export nuxtCOndig = {
		// **** 省略其他配置
    build:{
			// **** 省略其他配置
    	extend(config, {isDev, isClient}) {
      webpacExtend(config);
      // **** 省略其他配置
      isProd && (config.output.publicPath = publicPath);
      if (isClient && !isDev) {
          config.devtool = 'source-map'   // 处理client 增加sourcemap
          const release = 'demo-test23'; // 可以根据package.json的版本号或者Git的tag命名
          const SentryPlugin = require('@sentry/webpack-plugin')
          config.plugins.push(new SentryPlugin({
            include: '.nuxt/dist/client', // 要上传的文件夹 不能写为 ./dist 因为dist文件夹是编译好再复制出来的
            release,
            configFile: 'sentry.properties',// 这里就是默认读取根目录下的 .sentryclirc文件
            debug: true,// 这个是开启调试 出了错也可以看见
            ignore: ['node_modules', 'webpack.config.js'],
						// 比如说我网站的js文件地址为为 http://plinghuang.cn/[hash].js 就是下面的配置
            urlPrefix: '~/' // ~/为网站根目录,后续路径须对应source
          }))
      }
    },
    },
  	  modules: [
      '@nuxtjs/sentry',
    ],

    sentry: {
      dsn: '', // 创建完项目获取的dsn地址填入这里就好
      config: {}, // Additional config
    }
}
  1. 删除sourcemap,这个后续加入到构建脚本当中即可,在构建完之后删除
rm -rf ./dist/ *.map
  1. 运行项目,测试,看看是否成功。成功的界面如下图: 存在sourcemap
    image.png
    可以将错误解析
    image.png

上传sourcemap遇到的坑

  • 上传sourcemap失败,可以创建release 但是内部没有sourcemap文件
    image.png

参考资料

  1. sentry上传sourcemap