前端稳定性工具-Sentry
什么是Sentry?
为什么用Sentry?
- 实时错误跟踪:Sentry能够实时捕获应用程序中的错误,并立即通知开发团队。这大大减少了从用户报告问题到开发团队发现并解决问题的时间。
- 提高应用质量:通过持续监控和分析错误数据,开发团队可以及时发现并解决潜在的问题,从而提高应用程序的质量和稳定性。
- 详细的错误报告:Sentry提供的错误报告非常详细,包括完整的堆栈跟踪和上下文信息。这使得开发人员能够迅速定位问题的根源,并有效地进行调试和修复。
- 跨平台和语言支持:Sentry支持多种编程语言和平台,包括JavaScript、Python、Java、Ruby、PHP等。这意味着无论你的应用程序是用什么技术栈构建的,Sentry都能提供有效的错误跟踪服务。
- 可扩展性和集成性:Sentry具有强大的可扩展性,可以与各种第三方服务和工具集成,如Slack、GitHub、JIRA等。这使得开发团队能够根据自己的需求定制工作流程,并与其他团队协作工具无缝衔接。
- 节省时间和资源:通过自动化错误跟踪和报告,Sentry帮助开发团队节省了大量手动排查问题的时间。这不仅可以提高开发效率,还可以降低维护成本。
- 用户满意度提升:及时发现和解决应用程序中的问题可以显著提高用户体验和满意度。当用户遇到问题时,能够快速得到响应和解决,这将增强他们对应用程序的信任和忠诚度。
接入方式
准备工作-项目接入sentry
通过域名登录sentry
进来后没有看到team信息,加入到组。
加入后,进入Projects,查看自己在组内的项目,如果没有的话,需要创建。
创建项目需要权限,如果自己没有权限,可以查看下Members,找有权限的人员帮忙创建
如下图,直接按照文档说明加入到项目里即可
如果是小程序uni-app项目,直接使用vue3的sdk无法上报,那么可以使用第三方插件sentry-miniapp
1 import * as Sentry from "sentry-miniapp";
2 Sentry.init({
3 dsn: "https://xxxxxxxxx",
4 // Set tracesSampleRate to 1.0 to capture 100%
5 // of transactions for performance monitoring.
6 // We recommend adjusting this value in production
7 tracesSampleRate: 1.0
8 });
VUE项目的sentry设置
sentryInit 伪代码
1 // 调用sentryInit函数进行Sentry的初始化配置
2 sentryInit({
3 // 将sentry的init方法和app实例传递给sentryInit
4 sentry: { init },
5 app,
6
7 // 指定Sentry项目的DSN(数据源名称),用于将错误数据发送到正确的Sentry项目
8 dsn: 'https://xxxxx',
9
10 // 配置集成,这里添加了两个集成:BrowserTracing和Replay
11 integrations: [
12 // BrowserTracing集成用于跟踪浏览器中的性能问题,如页面加载时间等
13 new BrowserTracing({
14 // 通过vueRouterInstrumentation对Vue路由进行追踪
15 routingInstrumentation: vueRouterInstrumentation(router),
16 }),
17 // Replay集成用于记录和回放用户的操作,帮助开发者更好地理解错误发生的上下文
18 new Replay({
19 // 配置允许采集的接口,如果有非同源的接口域名需要在这里配置
20 networkDetailAllowUrls: [window.location.origin],
21
22 // 配置请求头中需要采集的字段 默认只采集 Content-Type、Content-Length、Accept, Authorization 需要确认需不需要
23 networkRequestHeaders: ['traceparent', '__refreshid__', 'Cookie', 'Authorization'],
24
25 // 配置响应头中需要采集的字段
26 networkResponseHeaders: ['traceparent', 'set-cookie'],
27
28 // 是否对所有文本进行脱敏处理,这里设置为false
29 maskAllText: false,
30
31 // 是否对所有输入进行脱敏处理,这里设置为false
32 maskAllInputs: false,
33
34 // 是否阻止所有媒体加载,这里设置为false
35 blockAllMedia: false,
36 }),
37 ],
38
39 // 设置追踪的采样率,1.0表示100%的追踪事件都会被采集 值介于0 至1.0, 事件是随机挑选的
40 tracesSampleRate: 1.0,
41
42 // 设置环境变量,用于区分不同的环境(如开发、测试、生产等)
43 environment: import.meta.env.MODE,
44
45 // 是否开启错误上报,
46 enabled: true,
47
48 // 设置版本号,可以用来过滤和定位特定版本的错误
49 release: import.meta.env.BUILD_TIME as string,
50
51 // 配置需要忽略的错误类型或错误消息,这些错误将不会被上报到Sentry
52 ignoreErrors: [
53 'ResizeObserver loop limit exceeded',
54 // ...(其他需要忽略的错误)
55 // 'ResizeObserver loop completed with undelivered notifications',
56 // /Failed to fetch dynamically imported module/,
57 // /Failed to load module script/,
58 // /Importing a module script failed/,
59 // /promise rejection captured with keys: code, error, msg/,
60 // /exception captured with keys: code, data, msg/,
61 // /Unable to preload CSS for/,
62 // /exception captured with keys: errorFields, outOfDate, values/,
63 ],
64
65 initialScope: {
66 tags: { "my-tag": "my value" },
67 user: { id: 4222xxx, email: "xxxx.com" },
68 },
69
70 // 设置用户名
71 username: xxx.userName,
72
73 // 是否将错误记录到控制台,这里设置为true
74 logErrors: true,
75 })
76
77
78
79 export function configSentryPlugin() {
80 return vitePluginSentry({
81 // 指定 Sentry 服务的 URL
82 url: 'https://sentry.xxxx.cn',
83
84 // 指定 Sentry 的授权令牌,这是连接 Sentry 服务并进行错误追踪的凭证
85 authToken: '', //sentry授权令牌
86
87 // 指定 Sentry 中的组织名称
88 org: 'sentry',
89
90 // 指定 Sentry 中的项目名称
91 project: 'xxxx',
92
93 // 指定发布的版本,这里使用了环境变量 BUILD_TIME 的值作为版本信息
94 release: process.env.BUILD_TIME as string,
95
96 // 配置 source map 的相关设置,用于在 Sentry 中更准确地定位错误位置
97 sourceMaps: {
98 // 指定需要包含进 source map 的文件或文件夹,这里包含了 './dist/assets' 文件夹
99 include: ['./dist/assets'],
100
101 // 指定需要忽略的文件或文件夹,这里忽略了 'node_modules' 文件夹
102 ignore: ['node_modules'],
103
104 // 设置 source map 的 URL 前缀,用于在 Sentry 中构建正确的 source map URL
105 urlPrefix: '~/cloudConfigAssets',
106 },
107
108 // 设置跳过环境检查,即使在非生产环境中也上传 source map 和错误信息到 Sentry
109 skipEnvironmentCheck: true,
110 })
111 }
方法: sentryLog (主动上传错误.'info')
对项目设置企业机器人提醒
准备企业微信机器人。
使用sentry的webhook插件,通知企业微信。
点击settings,projects
对项目配置alert规则
进入警报页面
进入后,选择issues,错误等级,环境等变量,然后可以根据自己的实际情况设置条件和过滤信息。
设置项目的sourceMap
定位错误位置
实现思路
生成上传的token
上传方式
使用插件上传
webpack
1 // vue.config.js
2 const SentryCliPlugin = require('@sentry/webpack-plugin')
3
4 ...
5
6 configureWebpack(config) {
7 if (process.env.NODE_ENV === 'production') {
8 config.plugin('sentry').use(SentryCliPlugin, [{
9 include: './dist/assets', // 指定上传目录
10 ignoreFile: '.gitignore', // 指定忽略文件配置
11 release: process.env.VUE_APP_BASE_API, // 指定发布版本
12 ignore: ['node_modules', 'webpack.config.js'],
13 configFile: './.sentryclirc', // 指定sentry上传配置
14 urlPrefix: '~/assets/' // 保持与publicpath相符
15 }])
16 }
17 }
vite
1 import vitePluginSentry from 'vite-plugin-sentry';
2
3 vitePluginSentry({
4 url: 'https://sentry.xxx.cn',
5 authToken: 'xxx', // sentry授权令牌
6 org: 'sentry',
7 project: 'xxx',
8 skipEnvironmentCheck: true,
9 release: process.env.BUILD_TIME as string,
10 sourceMaps: {
11 include: ['./dist/assets'],
12 ignore: ['node_modules'],
13 urlPrefix: `${process.env.VITE_PUBLIC_PATH}/assets`,
14 },
15 }),
16
17 build: {
18 target: 'es2015',
19 sourcemap: true,
20 },
上报方法封装
伪代码
1 /**
2 * sentry 初始化函数
3 *
4 * @param options - sentry 对象
5 *
6 * @returns 返回当前的刷新 id
7 * @public
8 */
9 export declare const sentryInit: ({ sentry, app, environment, enabled, release, tracesSampleRate, tags, username, dsn, isMiniapp, integrations, normalizeDepth, beforeSend, ...otherOptions }: SentryOptions) => {
10 __refreshId__: string;
11 };
12 /**
13 * 基础 sentry 上报函数
14 *
15 * @param sentry - sentry 对象
16 * @param error - 错误信息
17 * @param options - 额外的信息
18 *
19 * @returns type and meaning of return value
20 * @public
21 */
22 export declare const sentryLog: (sentry: any, error: Error | string, options: SentryLogOptions) => void;
23 /**
24 *
25 * 记录历史 api 请求信息
26 *
27 * @param apiLog - api 数据
28 * @param maxSaveLength - 最大保存长度
29 *
30 * @returns 无
31 * @public
32 */
33 export declare const saveApiLog: (apiLog: ApiLog, maxSaveLength?: number) => void;
34 /**
35 * sentry api 接口错误上报函数
36 *
37 * @param sentry - sentry 对象
38 * @param error - 错误信息
39 * @param options - 额外的信息
40 *
41 * @returns 无
42 * @public
43 */
44 export declare const sentryApiLog: (sentry: any, error: Error | string, options: SentryApiLogOptions) => void;
前端稳定性工具-Sentry的更多相关文章
- 看完这篇让你对各种前端build工具不再懵逼!
本文原标题为:我终于弄懂了各种前端build工具 译者:@Christian 译文:https://www.sdk.cn/news/5412 原文:https://medium.freecodecam ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- 前端构建工具之gulp_常用插件
gulp常用插件的使用 今天来看看一下gulp的常用插件的使用 就像gruntjs需要一个Gruntfile.js文件一样,gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做gulpfil ...
- 前端自动化工具gulp自动添加版本号
之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...
- 学习安装并配置前端自动化工具Gulp
Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...
- 前端构建工具gulpjs的使用介绍及技巧
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...
- 前端构建工具gulp使用
前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...
- 前端模块化工具-webpack
详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不 ...
- 关于前端build工具
第一.build工具的核心就是帮你安装和帮你做事.安装类工具:Npm.Bower.Yeoman等 做事类工具:Node.Grunt.gulp.Webpack等 安装类工具几乎什么东西 ...
- 前端自动化测试工具doh学习总结(二)
一.robot简介 robot是dojo框架中用来进行前端自动化测试的工具,doh主要目的在于单元测试,而robot可以用来模仿用户操作来测试UI.总所周知,Selenium也是一款比较流行的前端自动 ...
随机推荐
- dataX是阿里开源的离线数据库同步工具
dataX是阿里开源的离线数据库同步工具的使用 DataX介绍: DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.OD ...
- office系列软件(word、ppt、excel)打不开的解决方案
前言 这里我遇到的情况是点击都没反应,而不像很多人那样有报错弹窗,费劲千辛万苦才最终解决,中间一度自暴自弃想着干脆用WPS得了(大可不必),中间我尝试了三种方法,不一定哪种有效,权当分享: 一.使 ...
- JDK有用的新特性-Switch
目录 箭头表达式,新的 case 标签 yeild 返回值 Java Record Switch 的三个方面,参考: JEP 361 支持箭头表达式 支持 yied 返回值 支持 Java Recor ...
- Redisson 源码分析及实际应用场景之实现延迟队列
redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...
- 游戏AI行为决策——HTN(分层任务网络)
游戏AI行为决策--HTN 前言 Hierarchical Task Network(分层任务网络),简称HTN,与行为树.GOAP一样,也是一种行为决策方法.在<地平线:零之曙光>.&l ...
- C++: 16个基础的C++代码性能优化实例
前言 近期推动项目屎山代码进行了一波性能优化,实现了较大的性能提升.这里记录了部分近期代码优化的小技巧,这些例子仅从C++语言层面进行优化,主要在于优化类设计.减少隐含函数调用.减少拷贝等,较为基础实 ...
- tarjan—算法的神(一)
本篇包含 tarjan 求强连通分量.边双连通分量.割点 部分, tarjan 求点双连通分量.桥(割边)在下一篇. 伟大的 Robert Tarjan 创造了众多被人们所熟知的算法及数据结构,最著名 ...
- 开发一个属性名提示友好的Vue组件
这两天开发了一个组件,开发好之后想着先本地npm link 用一用试试,然后在vue3 项目中link了过来,发现VSCODE没有属性提示,鉴于考虑到一个好的组件应该是提示友好的,于是给组件准备加上属 ...
- AI构建新质生产力,合合信息Embedding模型助力专业知识应用
一.合合信息acge模型获MTEB中文榜单第一 现阶段,大语言模型的飞速发展吸引着社会各界的目光,背后支撑大型语言模型应用落地的Embedding模型也成为业内关注的焦点.近期,合合信息发布了文本 ...
- 【赵渝强老师】Kafka的消息持久化
1.Kafka消息持久性概述 Kakfa依赖文件系统来存储和缓存消息.对于硬盘的传统观念是硬盘总是很慢,基于文件系统的架构能否提供优异的性能?实际上硬盘的快慢完全取决于使用方式.同时 Kafka 基于 ...