成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

監控平臺前端SDK開發實踐

開發 開發工具
監控是提高故障處理能力和保障服務質量必需的一環,它需要負責的內容包括:及時上報錯誤、收集有效信息、提供故障排查依據。

[[203212]]

背景

監控是提高故障處理能力和保障服務質量必需的一環,它需要負責的內容包括:及時上報錯誤、收集有效信息、提供故障排查依據。

  • 及時上報錯誤:發生線上問題后,經由運營或者產品反饋到開發人員,其中流轉過程可能是幾分鐘甚至幾十分鐘,這段時間可能直接導致公司的經濟損失。如果有一個監控系統,在線上出現問題時,監控系統能夠***時間報警,并且通知到開發人員,那開發人員就可以***時間修復上線,使公司損失最小化。
  • 收集有效信息:特別是移動時代,定位一個問題時,需要很多用戶信息(如用戶手機版本、網絡情況、操作流程等)。如果沒有監控數據,往往只能靠猜,又或是來回找產品運營甚至出現問題的用戶去溝通定位,會花費大量的時間。假如監控系統里記錄了設備信息、錯誤發生時的場景信息和用戶的操作流程,我們就可以直接根據這些信息進行問題定位,在最短時間內完成故障修復,減小問題的影響面。
  • 提供故障排查依據:監控前端SDK所上報的錯誤信息和其它的記錄信息,其最終目的都是作為我們排查故障的依據,為我們保障服務提供堅實的依靠。

監控分類

綜上所述,我們的監控平臺強調實時性和全面性。為了保證實時性,錯誤發生時就嘗試上報,并且在監控面板可以實時的展現出來,以及有及時的告警機制。全面性是指收集的信息全面,包括用戶信息、環境信息和錯誤信息等,因此監控平臺包括記錄型監控和捕捉型監控。

  • 記錄型監控

頁面訪問記錄:用戶訪問了哪些頁面。

資源加載記錄:頁面中加載了哪些資源。

用戶行為記錄:用戶在頁面上做了哪些操作,目前我們只記錄用戶的點擊行為。

接口調用相關記錄:頁面調用了哪些接口。

  • 捕捉型監控

DNS劫持:頁面是否被劫持。

資源加載錯誤:哪些資源加載失敗了,為了捕獲跨域JavaScript的錯誤,需要在相應資源標簽上添加crossorigin屬性。

頁面錯誤:頁面渲染過程中出現的錯誤。

內部邏輯錯誤:用戶特定操作出現的錯誤,通過用戶行為定位。

接口錯誤:調用接口失敗。

場景還原法

當捕捉型監控捕捉到錯誤后,我們根據錯誤信息定位用戶,再通過記錄型監控還原該錯誤發生的場景,從而復現問題并及時定位解決。這個過程我們稱之為場景還原法。

本監控平臺就是通過收集監控數據,使用場景還原法來解決問題。它將支撐系統處理過的所有記錄和錯誤按照時間順序展示。通過場景還原的列表,我們可以還原出指定用戶在瀏覽頁面過程中發生的所有事情及其先后順序,從而判斷問題發生的時機和環境。

假設以下場景:

  • PM:BD反饋用戶在購物車刷不出來啦!
  • RD:什么?我試試!我這里可以看到的呀
  • PM:商戶反饋,店里有的用戶可以有的用戶不行
  • RD:別急,告訴我shopId和打不開的用戶的賬號,我去監控平臺上看一下
  • PM:xxx
  • RD在監控面板上使用場景還原功能,調出了該用戶的所有信息記錄。發現該用戶是從菜品詳情頁進入的購物車,而再查看正常的用戶都不是從這個入口進的,定位到是菜品詳情頁跳購物車的部分有問題,并立刻進行了修復

在以上這種用戶可能有多種操作的場景中,場景還原法可以針對特定用戶,還原其完整的操作路徑和頁面上發生的所有事情,幫助復現問題。

另外,一些非必現的問題,常常是由于不同機型或環境引起的,也可以在場景還原中復現問題的發生環境予以判斷。

本文主要介紹點餐終端技術組監控平臺HUNT的前端SDK的實踐經驗,仍有許多需要改進的地方,歡迎大家拍磚,幫助我們改進。

整體設計

如圖所示,我們的監控平臺HUNT,分為前端SDK、Web層支撐系統和監控面板三大部分。

  • 監控前端SDK:收集用戶端錯誤和相關信息,并進行上報
  • 監控Web層支撐系統:處理上報的監控信息
  • 監控面板:提供實時查看上報信息的面板,方便監控數據的便捷使用

前端SDK運行在前端頁面中,收集監控數據上報到支撐系統里,作為監控面板上查詢的數據源。

就前端SDK來說,可以分為數據模塊、數據處理模塊、上報模塊三大部分,其中數據模塊包括各具體監控數據模塊和環境數據模塊:

  • 數據模塊

各監控模塊:獲取需要上報的具體內容信息(EventData或ErrorData)

DNS劫持檢測

資源完整性檢查

資源加載錯誤

API監控

全局錯誤

用戶交互

自定義上報

環境模塊:獲取環境數據

  • 數據處理模塊:將環境數據和各內容數據,處理成接口對應的格式,并返回標準格式數據。
  • 上報模塊:從環境模塊獲取環境數據,再和內容數據一起根據不同監控類型分發到對應的數據處理模塊。獲取標準數據后發送到Node層。

上報模塊先查看本地緩存數據,將本地數據和新產生的數據一起上報,若上報失敗則存入LocalStorage。

詳細設計

SDK里采用單例模式,包括各監控模塊、環境模塊和上報模塊。

每個具體監控模塊獲取上報模塊實例進行上報,上報模塊內部保證同時只會有一個上報請求。

事件的監聽都在捕獲階段進行,防止因為事件冒泡被阻止而遺漏信息。

環境模塊

環境模塊收集以下環境信息:項目配置信息、Web環境數據、JsBridge環境數據。

其它的一些諸如UA、ISP等Web層可以獲取的信息由Web層獲取。

該模塊暴露init和getEnv方法。

  • init接收用戶配置的環境參數
  • getEnv更新頁面URL,再返回當前env對象freeze的一個副本

上報模塊

采取單請求上報的方式,每個用戶同時只會有一條上報請求,每次將當前記錄到的監控信息列表一起上報,成功后再繼續上報。

上報結束之前的新上報記錄都存在Localstorage,收到成功消息后刪除已上報數據,繼續上報,不成功的記錄保留在Localstorage。此處需注意對Localstorage存儲的上限做好控制。

在當前沒有數據正在上報的情況下觸發上報,嘗試將當前Localstorage的數據和新數據全部上報,若上報記錄過多,則分條發送。全部發送完或上報失敗,本次上報結束。

各具體監控模塊

DNS劫持

HTTPS頁面被劫持后頁面資源無法獲取,劫持者無利可圖的情況下會降低劫持的動力。

若仍被劫持,前端資源未到達本地,也無法完成上報,只能從網絡層去監控。

由于美團點評平臺已經全量切了HTTPS,因此該模塊不在本監控系統中。

不過之前本團隊做過對HTTP域下的劫持檢測,其檢測思路為請求Node層指定域名下的樣本HTML或JavaScript資源,對比返回結果是否符合預期。

資源完整性檢查

資源完整性檢查模塊的任務是記錄頁面加載了哪些資源,并進行上報。

當我們排查問題時,可以查看當前頁面已經加載成功了哪些資源及其加載順序,排除因為某些資源沒有加載或者加載順序不當而引起錯誤的情況。

資源加載完整性檢查的上報時機分四類,每次將開始監聽到觸發上報之間所有記錄到的已加載資源一起上報,減少上報請求數:

  1. onload:window.onload時觸發
  2. onload_timeout: onload超時(5秒)時觸發
  3. async:window.onload后一定延時(5秒)觸發,上報后停止監聽
  4. hash_change:onhashchange開始監聽,一定延時(5秒)觸發上報,上報后停止監聽

內存中維護一個已加載資源的數組,每次上報后刪除已上報的資源記錄。

資源加載錯誤監控

Window上error事件代理,過濾Window本身的error。

根據標簽類型判斷資源類型,src或href為資源地址。

為了捕獲跨域JavaScript的錯誤,需要在相應資源標簽上添加crossorigin屬性。

API錯誤監控

同樣采用XMLHttpRequest加hook方式實現。

open時記錄接口URL,send后根據status判斷,接口調用失敗時進行上報。

  1. XMLHttpRequest.prototype.open = function open(method, url, bool) { 
  2.     monitor.originXHR.open.apply(this, [method, url, bool]); 
  3.     // get something... 
  4.     // this.ajaxUrl = url; 
  5.  
  6. XMLHttpRequest.prototype.send = function send(_data) { 
  7.     const self = this; 
  8.  
  9.     this.addEventListener('readystatechange', () => { 
  10.         if (self.readyState === 4) { 
  11.             if (self.status !== 200 && self.status !== 304 && this.ajaxUrl !== REPORT_URL) { // filter urls 
  12.                 // report error info 
  13.                 // ... 
  14.                 // monitor.reporter.report(dataTypes.API_ERROR, error); 
  15.             } 
  16.         } 
  17.     }, false); 
  18.  
  19.     monitor.originXHR.send.apply(this, [_data]); 
  20. }; 

過濾掉SDK本身的上報地址(防止上報失敗引起循環上報)和一些其它需要忽略的接口地址。

注意,接口訪問URL時可能是一個相對路徑,建議補全協議和domain。

全局錯誤監控

監聽Window上的error事件,過濾事件代理的error。

用戶交互監控

監聽Window上捕獲階段的click事件,記錄點擊相關數據。

業務代碼中可以為比較關注的元素添加data屬性,每次點擊將會上報被點擊元素的指定屬性、附加信息和DOMPath幫助定位該元素。

記錄用戶交互信息可以明確問題發生時,該場景下用戶的具體操作路徑,結合環境數據、資源加載記錄和錯誤數據,整個問題場景就一目了然了。

接入方式

SDK的接入方式分為以下兩種:

1.先加載SDK

優點:可以記錄頁面加載完成前的情況,加載的資源,以及發生的錯誤。

缺點:影響頁面加載速度,直接拷貝在head中,對業務接入不友好。

2.后加載SDK

優點:不影響頁面性能。

缺點:只能監控加載成功的頁面,但我們需要關心頁面加載失敗的場景。

為了滿足功能需要,當前監控平臺v1的引入方式是將壓縮后的SDK代碼直接引入到被監控頁面的head中,并由業務代碼初始化配置項目名稱等。該步操作可以借助webpack的插件來幫助完成,減輕業務組接入的復雜度。

后續改進方向考慮采用:核心基礎庫+loaders/plugins 的方式,將必須先加載的SDK代碼引入在head中,其余代碼等頁面加載完成后再異步添加。

結語

HUNT系統上線后,已經完全覆蓋點餐終端組的活躍Web項目,進行監控數據的多維度上報。接下來工作重點是對收集到的數據進行有效的分析和利用。

目前大部分現有的監控工具只關注捕捉型監控這部分,記錄型監控是缺失的。相應的,以記錄型監控作為支撐的場景還原功能也是無法做到的。這類型的監控系統只能做到發現錯誤,但是對于錯誤定位幫助甚微。

接入本監控系統后,不但能在監控面板上實時的看到多種錯誤信息,還能根據錯誤發生的上下文,包括頁面加載的過程,其中用戶做了哪些操作,訪問了哪些API等,按時間順序排列來完成場景還原。再結合該錯誤發生的環境數據,復現問題和定位問題變的非常容易。

當收到故障反饋后,對一些偶發的問題,或者用戶操作復雜的問題等,可以直接通過監控面板了解情況,省去了大量的溝通成本,我們的故障反饋速度和能力也有極大的提高。

以上就是我們終端團隊監控平臺前端SDK部分的實踐分享,歡迎大家批評指正,有好的建議也希望能提出來幫助我們改進。我們后續將不斷優化,也將繼續與大家保持討論。耐心看到這里的讀者,表示十二萬分的感謝!

原文鏈接:https://tech.meituan.com/hunt-sdk-practice.html

【本文為51CTO專欄機構“美團點評技術團隊”的原創稿件,轉載請通過微信公眾號聯系機構獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2023-08-22 14:29:05

大前端

2024-07-05 18:00:55

2024-08-23 10:31:14

2022-09-26 08:25:56

監控平臺微服務

2009-04-21 08:43:19

GoogleAndroid移動OS

2022-08-11 13:34:13

SDK監控多環境

2021-12-31 18:35:40

監控Sentry開發

2013-08-22 11:16:46

開放平臺云平臺移動互聯網

2021-12-25 22:31:55

Sentry 監控SDK 開發 性能監控

2023-03-01 18:32:16

系統監控數據

2010-06-22 16:19:01

Black Berry

2020-02-05 14:55:11

物聯網平臺物聯網IOT

2024-05-22 09:54:19

2022-01-11 14:25:46

前端監控SDK

2016-11-07 20:01:56

2022-01-24 12:38:58

Vite插件開發

2022-03-01 16:26:09

鏈路監控日志監控分布式系統

2023-12-13 13:15:13

平臺開發實踐

2015-09-15 16:16:57

混合云云平臺云服務

2011-06-21 09:36:59

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品日韩 | 国产性生活一级片 | 最新伦理片 | 91视频麻豆 | 91精品国产乱码久久久久久久久 | 国产精品视频免费观看 | 粉色午夜视频 | 国产乱码精品1区2区3区 | 影视一区| 九九综合 | 国产精品不卡一区二区三区 | 成人美女免费网站视频 | 网址黄| 亚洲精品小视频在线观看 | 狼色网| 三级视频久久 | 欧美一级片a | 精品视频一区二区三区 | 国产精品国产a | 国产91精品久久久久久久网曝门 | 黄色一级网| 精品一区二区三区视频在线观看 | 亚洲精品日韩欧美 | 成人欧美一区二区三区1314 | 91精品无人区卡一卡二卡三 | 久久久久国产一区二区三区四区 | 久久国内 | 久久久久久国产精品 | 国产精品mv在线观看 | 中文字幕第100页 | 91 中文字幕 | 国产在线观看网站 | 欧美一区精品 | 久久久激情视频 | 蜜桃一区二区三区在线 | 国产成年人小视频 | 亚洲字幕在线观看 | 日韩精品av一区二区三区 | 免费观看毛片 | 国产精品久久久久久久久久免费看 | 午夜一区二区三区视频 |