錯誤監控----比如實現sentry一些思路

錯誤監控
?、引?
1.為什么需要前端錯誤監控
你的腳本在哪些邊界條件下會報錯?
你的腳本和樣式兼容性如何?
有哪些地區不能正常訪問你的?站?
出現問題之后,你如何快速定位排查,把損失降到最低?
如果你想解決以上這些問題,那么你需要給你的?站部署錯誤監控系統。
2.前端錯誤監控系統如何?作
監控系統分為上報端、服務端與管理后臺。上報端的形式?般為SDK,主要功能是捕獲錯誤與上
報,更進階的話可以考慮錯誤的復現與??數據的收集,還有保證??體驗的平順降級。服務端則
負責存儲、分析錯誤信息,在錯誤數量和嚴重性達到?定程度時進?告警。管理后臺則負責對錯誤
信息進?可視化展?,?便開發?員分析、復現問題與修復問題。
請添加圖片描述
二、前端常見錯誤類型

  1. 語法錯誤
const abc, // 應該在eslint階段或編譯階段捕獲
  1. JavaScript 運行時錯誤
 - 引用錯誤,類型錯誤等
console.log(notDefinedVariable) // 訪問沒有定義的變量
obj.undefinedFn() // 調用沒有定義的函數- Rejected promise
const p = new Promise((resolve, reject) => {setTimeout(2000, () => {reject()})
})
  1. 網絡請求錯誤
  - 404、500 等狀態碼錯誤- 超時錯誤- 跨域錯誤等
  1. 資源加載錯誤
  - 圖片、腳本、樣式表加載失敗
<img src="404.png" alt=""><script>const img = new Image()img.src = '404.png'
</script>
  1. 安全漏洞
    注入漏洞:SQL注入、命令注入、危險文件上傳,前端漏洞:XSS、CSRF等等……

三、錯誤捕獲與處理

  1. 瀏覽器內置錯誤捕獲機制

try/catch:將所有代碼包裹在try語句塊當中,但只能捕獲第一個宏任務的錯誤。

window.onerror:可以捕獲運行時錯誤與異步錯誤,但無法捕獲資源錯誤
window.onerror = function (message, url, line, column, error) {console.log(message, url, line, column, error);
}window.addEventListener
window.addEventListener('error', event => {// 可以捕獲運行時錯誤與資源錯誤
}, true)
window.addEventListener('unhandledrejection', event => {// 可以捕獲rejected promise
})
  1. 框架提供的錯誤捕獲
    錯誤邊界:用于捕獲子組件樹在渲染過程中發生的錯誤,并展示一個備用 UI,而不是讓整個應用崩潰。
  - Vue
// main.js
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'const app = createApp(App)
// 全局錯誤捕獲與處理
app.config.errorHandler = function (err, instance, info) {// 上報錯誤
}
app.mount('#app')// app.vue
import { onErrorCaptured } from 'vue';export default {setup() {// 錯誤邊界onErrorCaptured((err, instance, info) => {console.error('Error caught in setup:', err, instance, info);// 改變組件狀態,下個tick展示回退界面return false;});return {};},
};
React
class ErrorBoundary extends React.Component {constructor(props) {super(props);this.state = { hasError: false };}static getDerivedStateFromError(error) {// 設置狀態,下個tick展示回退界面return { hasError: true };}componentDidCatch(error, info) {// Example "componentStack"://   in ComponentThatThrows (created by App)//   in ErrorBoundary (created by App)//   in div (created by App)//   in App// 上報錯誤}render() {if (this.state.hasError) {// 回退界面,平順降級return this.props.fallback;}return this.props.children;}
}// 包裹易出錯的業務組件
<ErrorBoundary fallback={<p>Something went wrong</p>}><Profile />
</ErrorBoundary>- Axios: 注冊全局 response 鉤子捕獲與處理 Ajax 錯誤
axios.interceptors.response.use(function (response) {// Any status code that lie within the range of 2xx cause this function to trigger// Do something with response dataif(response.data.code !== 0 ){// 處理與上報}return response;
}, function (error) {// Any status codes that falls outside the range of 2xx cause this function to trigger// 處理與上報return Promise.reject(error);
});
  1. 用戶操作路徑記錄
    用戶事件記錄:在 window 上綁定事件處理函數,在事件捕獲階段記錄用戶事件。優點:不侵入業務開發,不受 stopPropagation 影響。缺點:數據量大,需要剔除無效事件。
const events = []window.addEventListener('click', event => {// event.target pageX, pageY, buttonevents.push(event)
}, {capture: true})

狀態倉庫快照:在 Vuex/Redux 等狀態倉庫注冊插件/中間件,記錄下每次數據變化前后的狀態快照。優點:能精確復現錯誤。缺點:需要在業務開發時將所有狀態納入狀態倉庫管理。

// snapshotPlugin.js
import _ from 'lodash'const snapshotPlugin = (store) => {let prevState = _.cloneDeep(store.state)store.subscribe((mutation, state) => {let nextState = _.cloneDeep(state)console.log('prevState', prevState)console.log('mutation', mutation)console.log('nextState', nextState)prevState = nextState})
}export { snapshotPlugin }// store/index.js
import { createStore } from 'vuex';
import { snapshotPlugin } from './snapshotPlugin';// 創建一個新的 store 實例
const store = createStore({state: {count: 0,},mutations: {increase(state) {state.count++}},devtools: true,plugins: [snapshotPlugin],
});export default store;

錄屏: 利用 MutationObserver - Web API | MDN & html2canvas-pro 在頁面 DOM 樹發生變化時截屏或者記錄 DOM 樹,來重現 BUG 發生前一小段時間的顯示畫面。
在這里插入圖片描述

  1. 捕獲SDK設計原則
    類型全面:需能捕獲各種類型的錯誤,兼容各種軟硬件環境
    業務無感:業務開發無感:CI/CD注入,nginx 注入,Vuex/Redux 插件。用戶體驗無感:強緩存,CDN加速,性能影響忽略不計,控制上報頻率。
    穩定: 版本穩定,運行穩定

四、錯誤上報策略

  1. 上報方式
    Image:手動構建一個Image,將上報內容賦值給src,后臺則會返回一像素透明圖片。優點:不影響頁面觀感,天然跨域,不占用ajax數量限額
    sendBeacon:POST承載數據量更大,http status 204無response body,頁面退出也不影響發送。
  2. 上報數據內容
    錯誤信息:錯誤類型、message、源文件路徑、行列號、堆棧跟蹤
    終端信息:瀏覽器版本、操作系統版本、網絡狀態
    用戶信息:用戶id、業務id、關鍵數據
    用戶行為路徑:近一小段時間的用戶事件、actions和state快照、錄屏
  3. 上報控制
    重復錯誤剔除:根據錯誤信息做重復剔除
    節流上報:一定時間內的錯誤合并上報。
    熔斷機制:大量持續重復的錯誤則停止上報。
    五、錯誤管理后臺
  4. 錯誤信息聚合展示
    錯誤數量、頻率、影響的業務、影響用戶數、地域分布、趨勢
  5. 告警
    觸發條件:嚴重程度、錯誤頻率、影響范圍
    通知方式:IM、短信、郵件到AI電話等
  6. 輔助排查
    位置還原:從 CI/CD 系統推送來的sourcemap還原真實出錯文件路徑、行列號。
    復現錯誤:用戶事件重播,錄屏重播,actions重播,遠程控制復現。
  7. 其他監控展示
    性能監控、流量監控、安全監控等。
    六、錯誤監控工具介紹

Sentry
Sentry 介紹和工作流程
Sentry 接入規范
Sentry 前端監控- 調研 & 實踐
代碼級監控Sentry使用手冊-內測版

七、總結與思考

  1. 閉環
    “閉環” 一詞在不同領域有著不同的含義,但總體來說,它強調的是一種形成完整回路、自我調節和持續改進的狀態或過程。
    錯誤監控與閉環的關系?前端監控通過收集各種數據,如用戶行為數據、頁面性能數據、錯誤日志等,能夠及時發現前端應用中存在的問題。對發現的問題進行及時處理。修復問題后,需要通過再次收集監控數據來驗證問題是否得到解決,以及優化措施是否有效。
  2. 冰山
    冰山理論,又稱冰山模型,最初由美國著名心理學家薩提亞提出,后在多個領域得到廣泛應用。冰山理論將一個事物或現象比作一座冰山。我們能直接觀察到的部分,就如同冰山露出水面的一小部分,而更大的部分則隱藏在水下,不可直接看見。
    在互聯網開發的技術層面,表面上用戶看到的是快速響應的界面、流暢的交互效果,但背后是復雜的技術架構和優化的性能表現。這就如同冰山理論中,水面下龐大而堅實的部分支撐著水面上的可見部分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85267.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85267.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux內核調試

1. 前置安裝 1.1 編譯好的內核 參考&#xff1a; https://blog.csdn.net/qq_51950769/article/details/148596916 1.2 編譯busybox BusyBox 是一個非常輕量級的多合一工具箱&#xff0c;常被稱為“Linux 的瑞士軍刀”。 簡單來說&#xff1a; 它把很多常用的 Linux 命令&am…

什么是曲面細分

什么是曲面細分 在CAD格式中&#xff0c;通常使用曲線和數學函數來定義曲面和實體。這些曲面的精確度和光滑度非常適用于制造過程。但是&#xff0c;現代GPU芯片針對由三角形網格體組成的曲面的渲染計算進行了高度優化。通常&#xff0c;實時渲染器和虛幻之類的游戲引擎只能處…

CANFD加速是什么?和CANFD有什么區別?

文章目錄 摘要什么是CANFD加速?CAN FD的基本原理:仲裁階段(Arbitration Phase):數據階段(Data Phase):關鍵特性:優勢:總結摘要 下面的截圖,大家肯定不陌生,在使用CAN設備上位機的時候,已經選擇了CANFD,但還有一個選項是“CANFD加速”,那CANFD加速和不加速有什么…

minio 啟動失敗--Incorrect Usage: flag provided but not defined: -consoleaddress

根據錯誤信息 flag provided but not defined: -consoleaddress&#xff0c;這表明 Minio 服務啟動時使用了未定義的命令行參數 --consoleaddress&#xff0c;導致啟動失敗。這個問題與 Minio 版本兼容性有關。 問題原因 參數名稱變更&#xff1a; Minio 版本 > RELEASE.20…

基于Rust的Polars學習筆記

基于Rust的Polars學習筆記 Polars 學習筆記 Cargo.toml通用配置 [package] name = "rustP" version = "0.1.0" edition = "2024"[dependencies] polars = { version = "0.48.1", features = ["full"]}Quickstart use po…

SpringBoot擴展——定時任務!

定時任務 項目開發中會涉及很多需要定時執行的代碼&#xff0c;如每日凌晨對前一日的數據進行匯總&#xff0c;或者系統緩存的清理、對每日的數據進行分析和總結等需求&#xff0c;這些都是定時任務。單體系統和分布式系統的分布式任務有很大的區別&#xff0c;單體系統就一個…

RTDETRv2 pytorch 官方版自己數據集訓練遇到的問題解決

rtdetrv2 訓練問題遇到的問題。 pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu117 1 Please make sure torchvision version > 0.15.2 發現自己實際裝的是 torchvison0.15.2cu117 修改_misc.py中修改為…

Linux系統移植⑤:uboot啟動流程詳解-board_init_f執行過程

Linux系統移植⑤&#xff1a;uboot啟動流程詳解-board_init_f執行過程 _main 中會調用 board_init_f 函數。 board_init_f 函數主要有兩個工作&#xff1a; ①初始化一系列外設&#xff0c;比如串口、定時器&#xff0c;或者打印一些消息等。 ②初始化 gd 的各個成員變量&am…

Git命令與代碼倉庫管理

步驟一、完成Gitee碼云上賬號注冊并新建代碼倉庫。 1.1 新建代碼倉庫 1.2 填寫信息并創建 1.3 獲取倉庫地址 https://gitee.com/dog-kidney/2022082206.git 步驟二、建立本地代碼倉庫&#xff0c;并連接到遠程代碼倉庫。 2.1初始化 git init 2.2添加倉庫 git remote add o…

資源占用多,Linux 系統中如何降低 CPU 資源消耗并提升利用率?

在 Linux 系統中降低 CPU 資源消耗并提升利用率,需從系統服務優化、進程管理、資源調度及內核參數調整等多維度入手。以下是適用于各類 Linux 發行版的通用優化方案,涵蓋基礎操作與進階策略: 一、服務與進程優化:減少無效資源占用 1. 關閉冗余系統服務 查看運行中的服務 …

技術與情感交織的一生 (八)

目錄 融合 東西廠公 接風宴 頭痛 “巴巴羅薩” 突擊 推進 助攻 96小時 寒冬 食堂 反攻 消耗 Delphi 西廠 內困 外患 “敦刻爾克” 多線作戰 大撤退 資源 融合 東西廠公 初次來到紙箱廠&#xff0c;是主廠區&#xff0c;感覺很大&#xff0c;相對西面正在…

webuploader分片上傳示例,服務端上傳文件到騰訊云CDN Teo 應用示例

本文環境&#xff1a;php7.3.4 CI3.0框架 一、大概步驟&#xff1a; &#xff08;1&#xff09;利用百度的webuploader插件&#xff0c;將大文件分片上傳的自己的服務器 &#xff08;2&#xff09;利用騰訊云接口從本服務器上傳到騰訊云 二、詳細代碼&#xff1a; 1、進入…

LeetCode 632.最小區間

你有 k 個 非遞減排列 的整數列表。找到一個 最小 區間&#xff0c;使得 k 個列表中的每個列表至少有一個數包含在其中。 我們定義如果 b-a < d-c 或者在 b-a d-c 時 a < c&#xff0c;則區間 [a,b] 比 [c,d] 小。 示例 1&#xff1a; 輸入&#xff1a;nums [[4,10,…

篇章五 系統性能優化——資源優化——CPU優化(2)

目錄 1.高級并發模式 1.1 工作竊取&#xff08;Work Stealing&#xff09; 1.工作竊取模式 2.ForkJoinPool實現 3.具體例子 1.2 結構化并發&#xff08;Structured Concurrency&#xff09; 1.結構化并發模式 2.Java 19 的 StructuredTaskScope 3.具體例子 1.3 對比與…

《中國電信運營商骨干網:歷史、現狀與未來演進》系列 第四篇:后發先至——中國移動CMNET的快速擴張與IP專網布局

摘要&#xff1a; 本文深入探討中國移動骨干網CMNET (AS9808) 的發展歷程、網絡架構及其與中國電信扁平化策略的差異。同時&#xff0c;解析其為承載高價值業務而構建的IP專用承載網的定位、結構與技術特點。最后&#xff0c;展望中國移動在5G、云計算和算力網絡時代&#xff0…

R情感分析:解碼文本中的情感

基于之前關于文本聚類和文本模型的博客&#xff0c;我們現在可以深入探討一個經典主題 - 情感分析。情感分析通過計算方式識別和分類文本中的情感&#xff0c;幫助理解公眾意見或消費者反饋。 什么是情感分析&#xff1f; 情感分析確定文本背后的情感基調&#xff0c;將其分類…

云徙渠道訂貨系統:賦能企業渠道管理的數字化引擎

在當今商業競爭日益激烈的環境下&#xff0c;企業如何高效管理和優化渠道成為關鍵問題。云徙渠道訂貨系統憑借其強大的數字化能力&#xff0c;為企業提供了全新的渠道管理解決方案&#xff0c;助力企業在復雜多變的市場環境中保持競爭力。 從渠道管理的痛點出發 傳統渠道管理方…

Nacos基礎使用(二):nacos作為配置中心

一、Nacos 配置中心核心屬性 在學習nacos 作為配置中心的使用之前&#xff0c;先看下Nacos 作為配置中心時的三個屬性&#xff0c;即&#xff1a; 命名空間、配置分組、配置集ID&#xff08;習慣稱為配置文件ID&#xff09;&#xff1b;在使用Nacos 作為配置中心 的過程中可以通…

SpringBoot 插件化架構的4種實現方案

在復雜業務場景下&#xff0c;傳統的單體應用架構往往面臨著功能擴展困難、代碼耦合嚴重、迭代效率低下等問題。 插件化架構作為一種模塊化設計思想的延伸&#xff0c;能夠使系統具備更好的擴展性和靈活性&#xff0c;實現"熱插拔"式的功能擴展。 本文將介紹Spring…

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大學視覺幾何組和 Google DeepMind 的研究人員在 2014 年提出的一個非常經典的深度卷積神經網絡模型。 一 核心結構 &#xff08;1&#xff09;深度&#xff1a; 模型名稱中的 "19" 指的是模型擁有 19 層帶有權重的層&#xff08;通常指&#xff1a;…