背景

现在的前端项目越来越复杂,在不同的客户端会产生各种在开发人员机器上不会出现的问题。当用户报告一个问题给开发人员的时候,开发人员无法直接定位问题。在此前,听过一次鹅厂的前端人员,他们对QQ里面的网页监控的一个讲座,深有感触。但是鹅厂是自己开发了一系统,从开发到运维到错误分析,是一整套的体系。对于我们的项目,我们不可能选择自己开发,在网上找到一个开源的产品 [ Sentry ],基本体现了鹅厂的那套思路。

关于 Sentry

Sentry 官网

以下是官网首页关于Sentry的介绍

Stop hoping your users will report errors

停止期待您的用户反馈错误

Open-source error tracking that helps developers monitor and fix crashes in real time. Iterate continuously. Boost efficiency. Improve user experience

帮助开发人员实时监控和修复错误,快速迭代,提高效率。提升用户体验。

不过多解释sentry产品,直接开始接入sentry, 非常简单。 sentry本身是有云服务的,可以让开发者快速体验,接入。云服务如果长期使用,是需要收费的,如果是体验就注册体验下即可,如果要项目用,可以自己搭建一个sentry 服务,参考 搭建自己的 sentry 服务

接入Sentry

本项目是使用webpack打包的工程,如不使用webpack的,参考官方文档,非常简单。

  1. 安装sentry的javascript的客户端npm包 npm install raven-js --save ; 参考 Installation
  2. 在JS中调用和配置; 参考Configuration
import Raven from 'raven-js';

Raven
.config('http://f3da1a4f401c434cba447be865d2bd41@sentry.io/10')
.install(); window.onload = function(){
document.getElementById('container').addEventListener('click',e => {
console.log(window['aaa'].aaa) //此处window['aaa']为undifine,所以这里一定会报错
}, false)
}

Raven.config中的值,叫做dsn(客户端密匙),可在项目的设置界面找到。如果看不到项目的设置菜单,可能是你账号权限不够。

查看效果

访问网页,点击按钮后,会产生JS异常,很快会收到来自sentry邮件通知,点开即能看到详细的错误,包括:

  1. 客户IP地址
  2. 浏览器和操作系统
  3. 访问的地址
  4. 错误的信息和调用堆栈

在上图中,可以看见错误。这个和我们源代码的异常信息是一致的。但是在下方的JS调用堆栈中,对应的是压缩后JS文件位置,和我们源代码无法对应上,无法直接的帮助我们排查和定位问题。

要错误对应上我们源代码的位置,sentry要求我们上传JS压缩时的sourcemaps。

上传 SourceMaps 对错误进行定位

如何产生SourceMap, 如果不熟悉的话,可以参考Sentry Generating Source Maps 文档,有各类框架如何产生source maps.

Sentry 有多种方式上传SourceMaps,release APISentry CLIsentry-webpack-plugin,详情参考Uploading Source Maps to Sentry, 我的工程中用的是webpack包,同时打包编译发布的过程是在CI中完成的,所以首先 sentry-webpack-plugin。

使用 Sentry Webpack Plugin 配合Webpack完成构建时上传SourceMaps

插件的使用方式,参考官方文档,以下截取文中内容的步骤:

  1. Start by creating a new authentication token under [Account] > API.
  2. Ensure you have project:write selected under scopes.
  3. Install @sentry/webpack-plugin using npm
  4. Create .sentryclirc file with necessary config (see Sentry Webpack Plugin docs below)
  5. Update your webpack.config.json

获取API Token

登录sentry,在账号 -> API 中,

  1. 请确保勾选了 project:write

安装sentry-webpack-plugin插件

npm install @sentry/webpack-plugin @sentry/cli --dev-save

创建.sentryclirc文件并配置

在项目的根目录下,创建一个文件.sentryclirc,并配置sentry cli需要的内容,以下是我的配置文件

[defaults]
url = http://sentry.io/
<!-- 此处可以从你的sentry.io的全路径看出,如:https://sentry.io/此处是你的org/此处是你的project/ -->
org = yunxun
project = qrcode [auth]
token = cbf0ec5f33fa478184194ad32701b06ccb92451b7c5742d6b1f1c70f95e511d2

更新webpack.config.json

const SentryPlugin = require('@sentry/webpack-plugin');

module.exports = {
// ... other config above ...
plugins: [
new SentryPlugin({
release: process.env.RELEASE,
include: './dist',
ignore: ['node_modules', 'webpack.config.js'],
})
]
};

以上步骤编译完成后,可以在Sentry的项目里面看到我们上传的源文件和SourceMap文件



根据上图可以看到,版本号,这个对于的在webpack插件中的release。也是说,sentry可以帮你管理多个版本的sourceMaps。

同时在这个版本上,可以看到有多少个问题,最后一个问题的时间。

Sourmap 上传后的错误效果

上述步骤完成后,在回到我们的页面,重现一次错误,然后看看在sentry有什么不同。

看图中比之前多出了几个功能:

  1. 多出版本信息
  2. 多出原始、最小化的标签
  3. 这次的错误提示,不是压缩后JS的提示,而是看起来和源代码一样

在这种方式下,可以直观,高效的定位排查问题。

参考

  1. Sentry 官网 Javascript 整合
  2. 前端错误日志监控——Sentry使用教程
  3. SPA项目实现前端错误监控及定位错误
  4. vue中如何使用sentry对错误日志进行监控
  5. 搭建自己的 sentry 服务

前端异常日志监控 - 使用Sentry的更多相关文章

  1. vue+sentry 前端异常日志监控

    敲代码最糟心不过遇到自己和测试的环境都OK, 客户使用有各种各样还复现不了的问题,被逼无奈只能走到这一步:前端异常日志监控! vue官方文档如下推荐: 就是说, vue有错误机制处理errorHand ...

  2. 业务线接入前端异常监控sentry

    1.前端异常处理的框架对比   是否开源 收费 语言 监控范围 sentry 是 自己搭建服务器(免费)价格 英文 Angular.AngularJs.Backbone.Ember.JavaScrip ...

  3. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  4. [转] vue前端异常监控sentry实践

    1. 监控原理 1.1 onerror 传统的前端监控原理分为异常捕获和异常上报.一般使用onerror捕获前端错误: window.onerror = (msg, url, line, col, e ...

  5. 从无到有<前端异常监控系统>落地

    导火索 有一天一个测试同事的一个移动端页面白屏了,看样子是页面哪里报错了.  我自己打开页面并没有报错,最后发现报错只存在于他的手机,移动端项目又是在微信环境下,调试起来会比较麻烦,最后用他手机调试才 ...

  6. 运维开发实践——基于Sentry搭建错误日志监控系统

    错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...

  7. Sentry错误日志监控你会用了吗?

    无论作为新手还是老手程序员在程序的开发过程中,代码运行时难免会抛出异常,而且项目在部署到测试.生产环境后,我们便不可能像在开发时那样容易的及时发现处理错误了.一般我们都是在错误发生一段时间后,错误信息 ...

  8. 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站

    总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...

  9. 前端异常监控 - BadJS

    前端异常监控 - BadJS 简介:BadJS 是 web 前端异常监控解决方案,提供一种 web 页面的脚本错误监控.上报.统计.查看等系统化的跟踪解决方案.目前BadJS覆盖了腾讯课堂.公众号.邮 ...

随机推荐

  1. TOPOI 测验1320, 问题C: 4410: [CF41D]Pawn 解题报告

    题目链接 题目大意 在一个树阵中按一定走法取一些树,使和最大且被 k+1整除 解题思路 类似一个数塔问题 因为最后的结果要被 k+1 整除,所以可以记录到每一个点  对 k+1 取余结果不同的最优解( ...

  2. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

  3. webissue 搭建 issue 分析工具

    http://www.cnblogs.com/feiyun8616/p/6208423.html

  4. (转)Linux系统基础网络配置老鸟精华篇

    Linux系统基础网络配置老鸟精华篇 原文:http://blog.51cto.com/oldboy/784625 对于linux高手看似简单的网络配置问题,也许要说出所以然来也并不轻松,因此仍然有太 ...

  5. Linux系统配置双网卡绑定bond0

    1.bonding简述 双网卡配置设置虚拟为一个网卡实现网卡的冗余,其中一个网卡坏掉后网络通信仍可正常使用,实现网卡层面的负载均衡和高可用性.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同 ...

  6. phpcms Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE错误

    我在phpcms的模板中自定义了一个变量,变量的值是通过pc标签赋予的. <?php $url="{$v[url]}"; ?> 结果报如上错误. 实际上应把PHP语句改 ...

  7. SpringBoot | 第十五章:基于Postman的RESTful接口测试

    前言 从上一章节开始,接下来的几个章节会讲解一些开发过程中配套工具的使用.俗话说的好,工欲善其事,必先利其器.对于开发人员而言,有个好用的工具,也是一件事半功倍的事,而且开发起来也很爽,效率也会提升很 ...

  8. 关于response.write(alert(''))弹窗改变页面格式问题

    不建议使用 Response.Write("<script>alert('增加年级失败')</script>"); 而使用 Page.ClientScrip ...

  9. 用python计算直角三角形斜边长

    直接上代码 import math def hypotenuse(a,b): return(math.sqrt(a**2+b**2)) side1 = int(input("第一条直角边:& ...

  10. vue-extend 选项

    vue-extend 选项 mixins 和extend 很相似,但有区别: var extendNews={ //后来的内容用变量接收 updated:function(){ console.log ...