直接用官网的

  • 平台可能访问速度不稳定
  • 免费版 收集错误有限,需要收费

本地版

参考:https://zhuanlan.zhihu.com/p/51446011
https://juejin.im/post/5cc2b8b9e51d456e40377319 可查看此文章写的很详细。

https://www.npmjs.com/package/sentry-miniapp 小程序日志监控

安装docker

关于 安装docker:https://www.jianshu.com/p/6e5da590aeda 这个介绍的更详细

  1. $ yum install docker -y

安装 Docker-Compose

  1. $ pip install docker-compose

启动 Docker

  1. $ systemctl start docker

2020最新方法

1. 拉取 **sentry-onpremise** 仓库

Onpremise 是官方提供的包含了使用 Docker 部署 Sentry 所需依赖的引导程序。

  1. // 找一个地方存放 sentry
  2. git clone https://github.com/getsentry/onpremise.git

拉取下来后,进入目录 onpremise,可以看到里面有份README.MD,按照这份说明文档步骤安装就行(文档 已你拉去下来的为准)

2、cd onpremise 傻瓜式操作: 运行 ./install.sh 这个过程会很慢很慢 下载很多东西 跟网络也有关系。

期间会 出现 填写 账户(据说 qq邮箱比较好)密码的时候 就代表 有戏了,快完成了 哈哈~

如果不行的话 试试这个方法:https://www.cnblogs.com/xiaochina/p/12585453.html

image.png

到这一步 就代表你已经成功了,。 好激动,我当时 花了好大劲 才到这的。

登录

快去浏览器打开 localhost:9000 端口,可以看到登录界面,输入上面搭建时候设置的邮箱和密码。
image.png
登录之后下个页面 点击保存 我的出现了错误,如图:
image.png
注意!!!!
输入账号密码登录之后,会进入一个初始化的界面,要填写 ROOT URL,如果遇到填写完成之后点击保存一直提示 保存错误 的时候,按照下面方法来操作就可以解决
编辑文件 config.yml,添加下面这一段

  1. auth.allow-registration: false
  2. beacon.anonymous: true
  3. mail.from: ""
  4. mail.host: ""
  5. mail.password: ""
  6. mail.port: 465
  7. mail.use-tls: true
  8. mail.username: ""
  9. system.admin-email: ""
  10. system.url-prefix: ""

然后设置下 sentry 的版本,如下命令,CONTAINER 换成你 docker 容器里面 web 的 name,可以使用 docker ps 命令看下,我的是 onpremise_web_1
image.png

  1. docker exec CONTAINER sentry config set sentry:version-configured '9.1.0'

这时候刷新下页面,

恭喜你进来了

设置 中文、时间: 点击 settings —》 my account
image.png
打开进入之后可以点击右上角添加新的项目 add project,选择语言或者框架vue
image.png
很清晰 很明了啊。 按照步骤 走一走吧~ 也可以看官网介绍:https://docs.sentry.io/platforms/javascript/vue/

DNS: [Project] » Settings » Client Keys.

组成格式:http://pubilckey:secretkey@localhost:9000/

结合项目

原项目打包:

第一种方式:

  1. // 安装官方提供的库
  2. yarn add @sentry/browser
  3. yarn add @sentry/integrations

main.js 文件里面添加下面一段代码

  1. import * as Sentry from '@sentry/browser'
  2. import * as Integrations from '@sentry/integrations'
  3. Sentry.init({
  4. dsn: 'https://<key>@<organization>.ingest.sentry.io/<project>',
  5. integrations: [
  6. new Integrations.Vue({
  7. Vue,
  8. attachProps: true
  9. })
  10. ]
  11. })

第二种方式:

如果您使用的是CDN版本或Loader,我们为每个集成提供一个独立的文件,您可以像这样使用它:

  1. <!-- Note that we now also provide a es6 build only -->
  2. <!-- <script src="https://browser.sentry-cdn.com/5.15.4/bundle.es6.min.js" integrity="sha384-ZCLAdLyk2e3lDVwlET1GVcapaPN7e5+yFCl60gu+EvhnoD14/avYIWRc+tEM6fwq" crossorigin="anonymous"></script> -->
  3. <script src="https://browser.sentry-cdn.com/5.15.4/bundle.min.js" integrity="sha384-Nrg+xiw+qRl3grVrxJtWazjeZmUwoSt0FAVsbthlJ5OMpx0G08bqIq3b/v0hPjhB" crossorigin="anonymous"></script>
  4. <!-- If you include the integration it will be available under Sentry.Integrations.Vue -->
  5. <script src="https://browser.sentry-cdn.com/5.15.4/vue.min.js" crossorigin="anonymous"></script>
  6. <script>
  7. Sentry.init({
  8. dsn: 'https://<key>@<organization>.ingest.sentry.io/<project>',
  9. integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
  10. });
  11. </script>

添加完毕后,我们 npm run dev 来看下吧,随便在某个组件地方制造一个错误

跨域

1、在nginx.conf里找到server项,并在里面添加如下配置,在控制台输入nginx -t,回车即可看到所在目录,直接vi 目录 即可查看。
2、添加跨域: add_header Access-Control-Allow-Origin *;
3、重启 : service nginx reload

源代码上传Sourcemap结合

@sentry/webpack-plugin

原理分析

上报错误的基本原理:
1、利用 Image 对象上报 (目前是主流方式) ( newImage).src = “xxxx”
2、采用 Ajax 通信的方式上报

Sentry 监控原理分析

1、重写 两个方法

  • 1、重写 window.onerror 方法 ```javascript message:错误信息(字符串)。可用于 HTML onerror=””处理程序中的 event。 source:发生错误的脚本 URL(字符串) lineno:发生错误的行号(数字) colno:发生错误的列号(数字) error: Error对象(对象)

window.onerror = function (message, source, lineno, colno, error) { console.log(‘message, source, lineno, colno, error’, message, source, lineno, colno, error); }

  1. - 2、重写 window.onunhandledrejection 方法
  2. Promise reject 且没有 reject 处理器的时候,会触发 unhandledrejection 事件;这可能发生在 window 下,但也可能发生在 Worker 中。 这对于调试回退错误处理非常有用。
  3. - Vue.config.errorHandler vue 中进行错误捕获
  4. ```javascript
  5. Vue.config.errorHandler = function (err, vm, info) {
  6. // error:错误信息
  7. // vm:发生错误的组
  8. // info:Vue 特定的错误信息,比如错误所在的生命周期钩子
  9. }

2、使用 Ajax 上报

支持 fetch 使用 fetch,否则使用 XHR。