如何在前端项目里接入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', // 只上传js
	        ignore: ['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.mfbz.cn/a/352486.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章带你了解C++中隐含的this指针

文章目录 一、this指针的引出二、this指针的特性【面试题】 一、this指针的引出 我们先来定义一个日期类Date,下面这段代码执行的结果是什么呢? class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}v…

STM32+ESP8266 实现物联网设备节点

一、硬件准备 本设备利用STM32F103ZE和ESP8266实现了一个基本的物联网节点,所需硬件如下 1、STM32F103ZE开发板 2、ESP8266模组(uart接口) 3、ST-LINK(下载用) 4、USB转串口模块(调试用) 二…

mac裁剪图片

今天第一次用mac裁剪图片,记录一下过程,差点我还以为我要下载photoshop了, 首先准备好图片 裁剪的目的是把图片的标题给去掉,但是不能降低分辨率,否则直接截图就可以了 解决办法 打开原始图片(不要使用预览&#xf…

利用柯西积分公式证明最大模定理

一、利用柯西积分公式证明最大模定理 一、利用柯西积分公式证明最大模定理 设复变函数f(z)在封闭区域上的解析,则该复变函数的模|f(z)|的最大值只能出现在该区域的边界上,除非是个常数

容器化部署 Jenkins,并配置SSH远程操作服务器

目录 一、Jenkins是什么 二、常见的部署Jenkins的方法 三、为什么选择容器化部署 四、容器化部署Jenkins步骤 1、安装 Docker 2、获取 Jenkins 镜像 3、创建并运行容器 4、访问 Jenkins 4.1 查看初始密码问题 5、配置 Jenkins 5.1 安装插件 5.2 创建管理员用户 5.3…

兄弟HL-1208黑白激光打印机清零方法

兄弟HL-1208黑白激光打印机基本参数: 产品类型:黑白激光打印机(定位类型家用) 最大打印幅面:A4 最高分辨率:600600dpi 黑白打印速度:20ppm 内存标配:1MB,最大&#…

数据结构(顺序表)

文章目录 一、线性表1、线性表1.1、线性表的定义1.2、线性表的操作 2、顺序表2.1、顺序表的实现--静态分配2.2、顺序表的实现--动态分配2.2、顺序表的特点 3、顺序表的基本操作3.1、插入操作3.2、删除操作3.3、查找操作3.2、按位查找3.2、按值查找 一、线性表 1、线性表 1.1、…

小白学python,都需要准备什么?有什么好的学习规划么?

对于一个0基础的小白来说,学习Python需要准备以下内容: 确定学习目标:在开始学习Python之前,你需要明确自己的学习目标。你是想学习Python的基础语法、数据结构、面向对象编程、Web开发、数据分析还是机器学习等方面的内容&#…

Ultraleap 3Di示例Interactable Objects组件分析

该示例代码位置如下: 分析如下: Hover Enabled:悬停功能,手放在这个模型上,会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候,手的模型的颜色会发生改变,反之,则不会…

蓝凌OA sysUiExtend.do 任意文件上传漏洞复现

0x01 产品简介 蓝凌核心产品EKP平台定位为新一代数字化生态OA平台,数字化向纵深发展,正加速构建产业互联网,对企业协作能力提出更高要求,蓝凌新一代生态型OA平台能够支撑办公数字化、管理智能化、应用平台化、组织生态化,赋能大中型组织更高效的内外协作与管理,支撑商业…

[UI5 常用控件] 02.Title,Link,Label

文章目录 前言1. Title1.1 结合Panel1.2 结合Table1.3 Title里嵌套Link 2. Link3. Label3.1 普通用法3.2 在Form里使用 前言 本章节记录常用控件Title,Link,Label。 其路径分别是: sap.m.Titlesap.m.Linksap.m.Label 1. Title Title可以结合其他控件一起使用 1.…

Android源码设计模式解析与实战第2版笔记(四)

第三章 自由扩展你的项目–Builder 模式 Builder 模式的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时 多个部件或零件&…

使用Spring Boot和Tess4J实现本地与远程图片的文字识别

概要: 在本文中,我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字。我们将从添加依赖说起,然后创建服务类以实现OCR,最后展示如何处理…

Redis客户端之Jedis(一)介绍

目录 一、Jedis介绍: 1、背景: 2、Jedis连接池介绍: 二、Jedis API: 1、连接池API 2、其他常用API: 三、SpringBoot集成Jedis: 1、Redis集群模式: (1)配置文件…

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践)

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践) 一.like模糊查询、group by 分组 having 过滤 建表语句 create table student(id int PRIMARY KEY,name char(10),age int,sex char(5)); alter table student add height…

TCP 状态转换以及半关闭

TCP 状态转换: 上图中还没有进行握手的时候状态是关闭的。 三次握手状态的改变: 客户端发起握手。 调用 connect() 函数时状态转化为:SYN_SENT。调用 listen() 函数时状态转换为:LISTEN。ESTABLISHED是被连接的状态。 四次挥手…

卢禹舜个展开幕作品震撼引人驻足

——“天地人和•大道不孤——卢禹舜中国画作品展”在贵州美术馆盛大开展 1月25日,寒风料峭,冬意正浓,但贵州美术馆大厅内却人潮涌动、热闹非凡。下午3点,由中国国家画院、贵州省文化和旅游厅主办,贵州画院(贵州美术馆…

字符串和C预处理器

本文参考C Primer Plus第四章学习 文章目录 常量和预处理器const限定符 1. 常量和预处理器 有时,在程序中要使用常量。例如,可以这样计算圆的周长: circumference 3.14159 * diameter; 这里,常量3.14159 代表著名的常量 pi(π)。…

详解静态网页数据获取以及浏览器数据和网络数据交互流程

目录 前言 一、静态网页数据 二、网址通讯流程 1.DNS查询 2.建立连接 3.发送HTTP请求 4.服务器处理请求 5.服务器响应 6.渲染页面 7.页面交互 三、URL/POST/GET 1.URL 2.GET 形式 3.POST 形式 四.获取静态网页数据 前言 在网站设计领域,基于纯HTM…

C++中map和set的使用

(图片来源于网络) 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶…