背景

现在的前端项目越来越复杂,在不同的客户端会产生各种在开发人员机器上不会出现的问题。当用户报告一个问题给开发人员的时候,开发人员无法直接定位问题。在此前,听过一次鹅厂的前端人员,他们对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. PAT天梯赛L3-004 肿瘤诊断

    题目链接:点击打开链接 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每 ...

  2. maven项目跳转页面报空指针错误 Servlet.service() for servlet 异常

    Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerExceptionat org.jaronsource.ms ...

  3. Duff and Meat(贪心)

    Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day ...

  4. 提高mysql千万级大数据SQL查询优化30条经验

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  5. LeetCode 069 Sqrt(x) 求平方根

    Implement int sqrt(int x).Compute and return the square root of x.x is guaranteed to be a non-negati ...

  6. Microsoft JET Database Engine (0x80004005)未指定的错误解决

    Microsoft JET Database Engine (0x80004005)未指定的错误,这个错误只有在使用Access数据库时才能出现 出现以上问题,可以使用以下步骤进行解决问题: 1.系统 ...

  7. Python metaclasses

    metaclasses元类:就像对象是类的实例一样,类是它的元类的实例.调用元类可以创建类. metaclass使用type来创建类,type可以被继承生成新的元类. 这个和C#的反射很相似. 下面是 ...

  8. linux之sed的用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  9. Android Service创建USB HOST通信

    之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...

  10. swift学习笔记7

    不管做什么事,只要敬业点,把该作的做好.不要总找借口. 不要看不起小事,生活本是一件件小事的集合.细节决定成败. 士兵突击里面有句台词:他每做一件小事的时候,都好像抓住了一根救命稻草,到最后你才发现, ...