如何在前端项目里接入Sentry监控系统并通过企业微信通知

能不能让用户录个屏过来呀?
用户使用的是什么机型的手机?
用户使用的什么浏览器呀?
用户的网络是什么情况?


线上出现问题时,技术部和业务部同学之间的对话诸如此类…业务同学也很栓Q呀,硬着头皮去问客户信息
客户配合还算好的,如果遇到不配合的客户,还真的是一个头两个大!
黑人问号脸

那么,这时候,接入一套监控系统,真真是有必要极了!!

Sentry 横空出世

Sentry 是一款软件监控工具,可帮助开发人员识别和修复与代码相关的问题。从错误跟踪到性能监控,Sentry 提供代码级可观察性,可以轻松诊断问题并持续了解应用程序代码的运行状况。

Sentry 可以为我们提供的帮助有什么?

错误监控(自动捕获错误,重播用户操作行为等等)
性能监控
发布健康监控

功能多多,其他不多说了,我们直接开整!

写在前边

sentry 分为 sass 版 和 私有化部署。

sass版
是最方便的使用方式, 只需进入 官方注册 激活邮箱并创建项目就可以使用了,但是会有使用数量限制等
0
私有化部署
需要开发者自己使用Python或者Docker进行安装,但胜在数据更加安全,限制少

最终选择哪种方式,可以根据实际的应用场景进行选择,基于我司业务,最终选择了“私有化部署”这种方式,求助了运维同学帮我们搭建了自己的sentry监控平台,然后登录上去,随后有关前端方面的真正的配置就开始了!

一:基础搭建

创建项目

create
成功之后会生成一个搭建指南
指南

根据指南,执行以下操作,具体如下:

安装依赖

yarn add @sentry/vue

SDK配置

import * as Sentry from '@sentry/vue'
Sentry.init({Vue,debug: false, // 调试模式environment: 'development', // 可以调整为一个变量dsn: 'https://xxxx',integrations: [new Sentry.BrowserTracing({tracePropagationTargets: [], // 设置哪些url应该被“分布式跟踪”错误请求routingInstrumentation: Sentry.vueRouterInstrumentation(router),}),new Sentry.Replay(),],tracesSampleRate: 1.0, // 错误上报率replaysSessionSampleRate: 0.1, // 重播会话采样率replaysOnErrorSampleRate: 1.0, // 重播错误采样率release: import.meta.env.VITE_SOURCEMAP_RELEASE,   // 建议从env环境变量中读取
})

下边详细说下重要的几个参数:

environment:实践的时候可以根据具体项目情况将该参数置为变量,这样子的话在sentry后台监控系统里边就能根据这个参数去区分具体是哪个环境发生的错误,也可以进行快速定位和分析
env

dsn:即项目向哪个url发送通知,那么就来源于此
dsn

release :这个至关重要,是上传SourceMap时要用到的参数,是错误代码分析时的统称版本号
release
一般到这来说,错误预警功能算是完成了。
我们可以尝试更改前端页面代码,随便加入一行错误代码,试试看~~

this.abcdef()   // 实则abcdef这个方法是不存在的

运行之后,控制台报错,这时候sentry会监控到这个错误,然后sentry后台也会受到相关通知,如下:
error

我们会发现,虽然能看到这个错误了,但是依旧不知道是在哪一行,而接下来的一步,上传SourceMap 就能帮我们定位到是哪一行代码出错了

二:上传SourceMap

上传方式

使用 @sentry/cli 手动上传 ;
其实就是上边指南中尚未截取的部分,使用npx,按照提示语一步一步进行
sentry/cli
另外一种方式是使用
插件 @sentry/webpack-plugin 或者 @sentry/vite-plugin 上传;

具体需要看项目里使用的打包方式是 webpack 还是 vite,两种大同小异,这里结合我们自己的项目特别介绍一下@sentry/vite-plugin的使用方法

安装依赖

yarn add @sentry/vite-plugin

SDK配置

import { sentryVitePlugin } from '@sentry/vite-plugin'
export default defineConfig(({ mode }) => {const envDir = fileURLToPath(new URL('./environments', import.meta.url))const envParams = loadEnv(mode, envDir)return {envDir,plugins: [sentryVitePlugin({org: 'xxx',project: 'xxxx',url: 'https://xxxxx.com/',include: './dist/js', // 只上传jsignore: ['node_modules', 'vite.config.ts'],cleanArtifacts: true, // 先清理再上传urlPrefix: '~/js', // 线上对应的url资源的相对路径authToken: envParams.VITE_SENTRY_AUTH_TOKEN,release: envParams.VITE_SOURCEMAP_RELEASE,}),],}
})

下边详细说下重要的几个参数:

org:即组织名称,是唯一ID
org

project:即要接入监控系统的项目
project

url:即sentry管理后台平台地址,与dsn相呼应
include:上传SourceMap的路径代码,一般我们只会分析js文件代码
cleanArtifacts:尤其重要,一定要先清洗再上传,否则资源越积越多
urlPrefix:具体路径可查看你的网页控制台打开后的路径是怎样的
urlPrefix
authToken:生成的方式有两种,取决你是采用哪种方式上传的SourceMap。
如果是手动上传使用@sentry/cli,那么会在执行完所有的提示输入后在根目录自动生成一个文件.env.sentry-build-plugin,文件内容如下
token

如果使用插件@sentry/vite-plugin,那么可在sentry管理后台手动生成使用,具体操作如下
authToken
release:上边提到过的,这决定了SourceMap的版本记录

至此,我们点进错误通知后就能直接定位到发生错误的代码了
17
由此我们可以看到是第17行代码发生了错误!

发生了错误之后,肯定是立马解决呀,那么接入通知也是必不可少的,官方提供的是邮件通知,但是在国内办公大环境里邮件查看后并立马回复普及必然是比不上社交软件的回复速度,我司办公常用的沟通软件是“企业微信”,所以接下来就展开说说如何将错误消息通过企业微信通知到处理人!

三:接入企业微信,进行预警通知

方案

WebHooks

警报
首先我们先查看项目中是否已经集成WebHooks,如果暂未集成,需要开启WebHooks~
然后再进行预警规则配置
配置预警规则

企微文档

接下来就是找WebHooks 要配置的 CallBackUrl,填入到上边的图片中。

首先,在企业微信群里边引入一个机器人,然后右键查看机器人配置
机器人
在查看机器人配置说明的时候,查看到 官方文档群机器人配置说明 有对发送的消息格式有要求!
而那边Sentry管理后台配置完这个WebHook 地址后也并未生效,于是,意识到是报文格式不正确,随后进行验证,发现sentry 发送的错误预警的格式如下

{"id": "22","project": "xxx","project_name": "xxx","project_slug": "xxx","logger": null,"level": "error","culprit": "s.created(src/views/aaaaa)","message": "","url": "https://sentry.xxx.com/xxxxx","triggering_rules": ["xxx \u6d4b\u8bd5\u73af\u58831"],"event": {"event_id": "6f76509exxxxxxxxxx2668492f0","level": "error","version": "7","type": "error","fingerprint": ["{{ default }}"],"culprit": "s.created(src/views/aaaaa)","logger": "","platform": "javascript","timestamp": 1706084260.74,"received": 1706084260.906766,"release": "test20240124","environment": "test1","user": { "ip_address": "100.1.1.1" },"request": {"url": "http://192.168.1.1:1111/aaaaa","headers": [["User-Agent","Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"]]},"contexts": {"browser": {"name": "Mobile Safari","version": "13.0.3","type": "browser"},"device": {"family": "iPhone","model": "iPhone","brand": "Apple","type": "device"},"os": { "name": "iOS", "version": "13.2.3", "type": "os" },"replay": {"replay_id": "844078ccccccccc3e486e63d1e31","type": "replay"},............

查看后发现接收到的报文显然与企微文档中要求的四种格式不符,那么,最快的方法是让后端协助提供一个接口把上边的这个报文转成企微要求的通知格式

随后,当…当…当…当…,我们便成功接收到了错误预警通知,具体如下
企微
Happy Ending!!
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/246492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

预训练语言模型transformer

预训练语言模型的学习方法有三类:自编码(auto-encode, AE)、自回归(auto regressive, AR),Encoder-Decoder结构。 决定PTM模型表现的真正原因主要有以下几点: 更高质量、更多数量的预训练数据增加模型容量…

插槽(64-67)

文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容(默认值)3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…

【CSS】字体效果展示

测试时使用了Google浏览器。 1.Courier New 2.monospace 3.Franklin Gothic Medium 4.Arial Narrow 5.Arial 6.sans-serif 7.Gill Sans MT 8.Calibri 9.Trebuchet MS 10.Lucida Sans 11.Lucida Grande 12.Lucida Sans Unicode 13.Geneva 14.Verdana 15.Segoe UI 16.Tahoma 17.…

AWS 专题学习 P11 (Machine Learning)

文章目录 专题总览机器学习服务1. Amazon Rekognition2. Amazon Rekognition - Content Moderation3. Amazon Transcribe4. Amazon Polly5. Amazon Polly - Lexicon & SSML6. Amazon TranscribeAmazon Translate7. Amazon Lex & Connect8. Amazon Comprehend9. Amazon …

大数据期望最大化(EM)算法:从理论到实战全解析

文章目录 大数据期望最大化(EM)算法:从理论到实战全解析一、引言概率模型与隐变量极大似然估计(MLE)Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…

环形链表的检测与返回

环形链表 王赫辰/c语言 - Gitee.com 快慢指针的差距可以为除一以外的数吗?不可以如果差奇数则无法发现偶数环,是偶数无法发现奇数环,本题思路为指针相遇则为环,而以上两种情况会稳定差一,导致指针永不相遇 最终返回…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

Android SharedPreferences源码分析

文章目录 Android SharedPreferences源码分析概述基本使用源码分析获取SP对象初始化和读取数据写入数据MemoryCommitResultcommitToMemory()commit()apply()enqueueDiskWrite()writeToFile() 主动等待写回任务结束 总结 Android SharedPreferences源码分析 概述 SharedPrefer…

Parallels Desktop 19 for Mac虚拟机 一键激活版

Parallels Desktop是一款功能强大的虚拟机软件,它允许用户在Mac电脑上同时运行Windows、Linux和其他操作系统。Parallels Desktop提供了直观易用的界面,使用户可以轻松创建、配置和管理虚拟机,该软件具有快速启动和关闭虚拟机的能力&#xff…

Servlet 与 MVC

主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…

从零开发短视频电商 Tesseract OCR识别增强

文章目录 概要图像预处理阶段默认反转图像重新缩放二值化噪音消除膨胀/腐蚀旋转/偏移校正边框缺少边框边框太大扫描边框去除 透明度/Alpha通道 引擎处理阶段语言模型配置提高识别速度词典、单词列表和模式表格识别 使用 Tesseract OCR 的 GUI 和其他项目 原文如下: …

【网络协议测试】畸形数据包——圣诞树攻击(DOS攻击)

简介 TCP所有标志位被设置为1的数据包被称为圣诞树数据包(XMas Tree packet),之所以叫这个名是因为这些标志位就像圣诞树上灯一样全部被点亮。 标志位介绍 TCP报文格式: 控制标志(Control Bits)共6个bi…

安全基础~通用漏洞1

文章目录 知识补充Acess数据库注入MySQL数据库PostgreSQL-高权限读写注入MSSQL-sa高权限读写执行注入Oracle 注入Mongodb 注入sqlmap基础命令 知识补充 order by的意义: union 操作符用于合并两个或多个 select语句的结果集。 union 内部的每个 select 语句必须拥有…

MVC架构模式与三层架构

提示:博客中的图片来源于动力节点在B站的视频讲解。 MVC架构模式与三层架构 一、三层架构二、MVC(model view controller)1.MVC 架构的工作流程(1)JSP Servlet javabean实现MVC。(2)SSM&#…

防御保护---安全策略

文章目录 一.安全策略概述 概述: 安全策略的作用: 包过滤防火墙的安全风险 状态检测防火墙访问过程 安全策略与传统防火墙的区别 二.案例分析 基础配置:(正常数通) 安全策略配置 练习 一.安全策略概述 概述&#xff1…

数据挖掘笔记1

课程:清华大学-数据挖掘:理论与算法(国家级精品课)_哔哩哔哩_bilibili 一、Learning Resources 二、Data 数据是最底层的一种表现形式。数据具有连续性。从存储上来讲,数据分为逻辑上的和物理层的。大数据&#xff1…

Elasticsearch8.11集群部署

集群就是多个node统一对外提供服务,避免单机故障带来的服务中断,保证了服务的高可用,也因为多台节点协同运作,提高了集群服务的计算能力和吞吐量。ES是一个去中心化的集群,操作一个节点和操作一个集群是一样的&#xf…

Jmeter接口测试总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter介绍&测试准备 Jmeter介绍:Jmeter是软件…

LeetCode:1706. 球会落何处(Java 模拟)

目录 1706. 球会落何处 题目描述: 实现代码与解析: 原理思路: 1706. 球会落何处 题目描述: 用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线…

ubuntu 20.04 使用 webrtc-streamer自动退出,报错GLIBC 问题解决方法

文章目录 前言Ubuntu 20.4中使用webrtc-streamer报错总结 前言 前端vue2 项目需要播放海康的视频流,本地启动起来了,现在需要的服务器上部署,服务器是Ubuntu 20.04,下面是部署时遇到的问题及解决方法,总耗时2天。 不知…