摘要:異常監(jiān)控包括前端腳本執(zhí)行報(bào)錯(cuò)等。本文針對整個(gè)前端監(jiān)控,設(shè)計(jì)適用的方案。前端埋點(diǎn)系統(tǒng)的前后端通信加密在上報(bào)數(shù)據(jù)的前后端通信中,需要和端協(xié)商加密機(jī)制,利用庫來實(shí)現(xiàn)的加密,已經(jīng)是一個(gè)廣泛被采用的加密算法。
在線上項(xiàng)目中,需要統(tǒng)計(jì)產(chǎn)品中用戶行為和使用情況,從而可以從用戶和產(chǎn)品的角度去了解用戶群體,從而升級和迭代產(chǎn)品,使其更加貼近用戶。用戶行為數(shù)據(jù)可以通過前端數(shù)據(jù)監(jiān)控的方式獲得,除此之外,前端還需要實(shí)現(xiàn)性能監(jiān)控和異常監(jiān)控。性能監(jiān)控包括首屏加載時(shí)間、白屏?xí)r間、http請求時(shí)間和http響應(yīng)時(shí)間。異常監(jiān)控包括前端腳本執(zhí)行報(bào)錯(cuò)等。
實(shí)現(xiàn)前端監(jiān)控有三個(gè)步驟:前端埋點(diǎn)和上報(bào)、數(shù)據(jù)處理和數(shù)據(jù)分析。本文針對整個(gè)前端監(jiān)控,設(shè)計(jì)適用的方案。本文的主要內(nèi)容分為:
為什么需要前端監(jiān)控
常用前端埋點(diǎn)方案總結(jié)
前端埋點(diǎn)方案選型和前端上報(bào)方案設(shè)計(jì)
前端監(jiān)控結(jié)果可視化展示系統(tǒng)的設(shè)計(jì)
原文的地址,在我的博客中:https://github.com/forthealll...
如有幫助,您的star是對我最好的鼓勵(lì)~
一、為什么需要前端監(jiān)控前端監(jiān)控的目的是:
獲取用戶行為以及跟蹤產(chǎn)品在用戶端的使用情況,并以監(jiān)控?cái)?shù)據(jù)為基礎(chǔ),指明產(chǎn)品優(yōu)化的方向。
前端監(jiān)控可以分為三類:數(shù)據(jù)監(jiān)控、性能監(jiān)控和異常監(jiān)控。下面我們來一一的了解。
(1)數(shù)據(jù)監(jiān)控數(shù)據(jù)監(jiān)控,顧名思義就是監(jiān)聽用戶的行為。常見的數(shù)據(jù)監(jiān)控包括:
PV/UV:PV(page view),即頁面瀏覽量或點(diǎn)擊量。UV:指訪問某個(gè)站點(diǎn)或點(diǎn)擊某條新聞的不同IP地址的人數(shù)
用戶在每一個(gè)頁面的停留時(shí)間
用戶通過什么入口來訪問該網(wǎng)頁
用戶在相應(yīng)的頁面中觸發(fā)的行為
統(tǒng)計(jì)這些數(shù)據(jù)是有意義的,比如我們知道了用戶來源的渠道,可以促進(jìn)產(chǎn)品的推廣,知道用戶在每一個(gè)頁面停留的時(shí)間,可以針對停留較長的頁面,增加廣告推送等等。
(2)性能監(jiān)控性能監(jiān)控指的是監(jiān)聽前端的性能,主要包括監(jiān)聽網(wǎng)頁或者說產(chǎn)品在用戶端的體驗(yàn)。常見的性能監(jiān)控?cái)?shù)據(jù)包括:
不同用戶,不同機(jī)型和不同系統(tǒng)下的首屏加載時(shí)間
白屏?xí)r間
http等請求的響應(yīng)時(shí)間
靜態(tài)資源整體下載時(shí)間
頁面渲染時(shí)間
頁面交互動(dòng)畫完成時(shí)間
這些性能監(jiān)控的結(jié)果,可以展示前端性能的好壞,根據(jù)性能監(jiān)測的結(jié)果可以進(jìn)一步的去優(yōu)化前端性能,比如兼容低版本瀏覽器的動(dòng)畫效果,加快首屏加載等等。
(3)異常監(jiān)控此外,產(chǎn)品的前端代碼在執(zhí)行過程中也會(huì)發(fā)生異常,因此需要引入異常監(jiān)控。及時(shí)的上報(bào)異常情況,可以避免線上故障的發(fā)上。雖然大部分異??梢酝ㄟ^try catch的方式捕獲,但是比如內(nèi)存泄漏以及其他偶現(xiàn)的異常難以捕獲。常見的需要監(jiān)控的異常包括:
Javascript的異常監(jiān)控
樣式丟失的異常監(jiān)控
二、常用前端埋點(diǎn)方案總結(jié)在上一節(jié)中介紹了前端監(jiān)控的作用,那么如何實(shí)現(xiàn)前端監(jiān)控呢,實(shí)現(xiàn)前端監(jiān)控的步驟為:前端埋點(diǎn)和上報(bào)、數(shù)據(jù)處理和數(shù)據(jù)分析。首要的步驟就是前端埋點(diǎn)和上報(bào),也就是數(shù)據(jù)的收集階段。數(shù)據(jù)收集的豐富性和準(zhǔn)確性會(huì)影響對產(chǎn)品線上效果的判別結(jié)果。
目前常見的前端埋點(diǎn)方法分為三種:代碼埋點(diǎn)、可視化埋點(diǎn)和無痕埋點(diǎn)。下面一一介紹每一種埋點(diǎn)的方法。
(1) 代碼埋點(diǎn)代碼埋點(diǎn),就是以嵌入代碼的形式進(jìn)行埋點(diǎn),比如需要監(jiān)控用戶的點(diǎn)擊事件,會(huì)選擇在用戶點(diǎn)擊時(shí),插入一段代碼,保存這個(gè)監(jiān)聽行為或者直接將監(jiān)聽行為以某一種數(shù)據(jù)格式直接傳遞給server端。此外比如需要統(tǒng)計(jì)產(chǎn)品的PV和UV的時(shí)候,需要在網(wǎng)頁的初始化時(shí),發(fā)送用戶的訪問信息等。
代碼埋點(diǎn)的優(yōu)點(diǎn):
可以在任意時(shí)刻,精確的發(fā)送或保存所需要的數(shù)據(jù)信息。
缺點(diǎn):
工作量較大,每一個(gè)組件的埋點(diǎn)都需要添加相應(yīng)的代碼
(2)可視化埋點(diǎn)通過可視化交互的手段,代替代碼埋點(diǎn)。將業(yè)務(wù)代碼和埋點(diǎn)代碼分離,提供一個(gè)可視化交互的頁面,輸入為業(yè)務(wù)代碼,通過這個(gè)可視化系統(tǒng),可以在業(yè)務(wù)代碼中自定義的增加埋點(diǎn)事件等等,最后輸出的代碼耦合了業(yè)務(wù)代碼和埋點(diǎn)代碼。
可視化埋點(diǎn)聽起來比較高大上,實(shí)際上跟代碼埋點(diǎn)還是區(qū)別不大。也就是用一個(gè)系統(tǒng)來實(shí)現(xiàn)手動(dòng)插入代碼埋點(diǎn)的過程。
缺點(diǎn):
可視化埋點(diǎn)可以埋點(diǎn)的控件有限,不能手動(dòng)定制。
(3)無埋點(diǎn)無埋點(diǎn)并不是說不需要埋點(diǎn),而是全部埋點(diǎn),前端的任意一個(gè)事件都被綁定一個(gè)標(biāo)識,所有的事件都別記錄下來。通過定期上傳記錄文件,配合文件解析,解析出來我們想要的數(shù)據(jù),并生成可視化報(bào)告供專業(yè)人員分析因此實(shí)現(xiàn)“無埋點(diǎn)”統(tǒng)計(jì)。
從語言層面實(shí)現(xiàn)無埋點(diǎn)也很簡單,比如從頁面的js代碼中,找出dom上被綁定的事件,然后進(jìn)行全埋點(diǎn)。
無埋點(diǎn)的優(yōu)點(diǎn):
由于采集的是全量數(shù)據(jù),所以產(chǎn)品迭代過程中是不需要關(guān)注埋點(diǎn)邏輯的,也不會(huì)出現(xiàn)漏埋、誤埋等現(xiàn)象
缺點(diǎn):
無埋點(diǎn)采集全量數(shù)據(jù),給數(shù)據(jù)傳輸和服務(wù)器增加壓力
無法靈活的定制各個(gè)事件所需要上傳的數(shù)據(jù)
三、前端埋點(diǎn)方案選型和前端上報(bào)方案設(shè)計(jì)第一章中介紹了前端所需要監(jiān)聽的信息,在第二章中介紹了前端埋點(diǎn)的常見方式,本文來根據(jù)需求,來定制我們的埋點(diǎn)和上報(bào)方案。
(1)監(jiān)控?cái)?shù)據(jù)首先我們需要明確一個(gè)產(chǎn)品或者網(wǎng)頁,普遍需要監(jiān)控和上報(bào)的數(shù)據(jù)。監(jiān)控的分為三個(gè)階段:用戶進(jìn)入網(wǎng)頁首頁、用戶在網(wǎng)頁內(nèi)部交互和交互中報(bào)錯(cuò)。每一個(gè)階段需要監(jiān)控和上報(bào)的數(shù)據(jù)如下圖所示:
(2)埋點(diǎn)方案在實(shí)際項(xiàng)目中考慮到上報(bào)數(shù)據(jù)的靈活定制,以及減少數(shù)據(jù)傳輸和服務(wù)器的壓力,在所需埋點(diǎn)處不多的情況下,常用的方式是代碼埋點(diǎn)。
以用戶進(jìn)入首頁為例,我們在首頁渲染完成后會(huì)發(fā)送事件類型和類型相關(guān)的數(shù)據(jù)給server端,告知首頁的監(jiān)控信息。
(3)上報(bào)周期和上報(bào)數(shù)據(jù)類型如果埋點(diǎn)的事件不是很多,上報(bào)可以時(shí)時(shí)進(jìn)行,比如監(jiān)控用戶的交互事件,可以在用戶觸發(fā)事件后,立刻上報(bào)用戶所觸發(fā)的事件類型。如果埋點(diǎn)的事件較多,或者說網(wǎng)頁內(nèi)部交互頻繁,可以通過本地存儲(chǔ)的方式先緩存上報(bào)信息,然后定期上報(bào)。
接著來確定需要埋點(diǎn)上報(bào)的數(shù)據(jù),上報(bào)的信息包括用戶個(gè)人信息以及用戶行為,主要數(shù)據(jù)可以分為:
who: appid(系統(tǒng)或者應(yīng)用的id),userAgent(用戶的系統(tǒng)、網(wǎng)絡(luò)等信息)
when: timestamp(上報(bào)的時(shí)間戳)
from where: currentUrl(用戶當(dāng)前url),fromUrl(從哪一個(gè)頁面跳轉(zhuǎn)到當(dāng)前頁面),type(上報(bào)的事件類型),element(觸發(fā)上報(bào)事件的元素)
what: 上報(bào)的自定義擴(kuò)展數(shù)據(jù)data:{},擴(kuò)展數(shù)據(jù)中可以按需求定制,比如包含uid等信息
上報(bào)數(shù)據(jù)的對象為:
{ ----------------上報(bào)接口本身提供-------------------- currentUrl, fromUrl, timestamp, userAgent:{ os, netWord, } ----------------業(yè)務(wù)代碼配置和自定義上報(bào)數(shù)據(jù)------------ type, appid, element, data:{ uid, uname } }(4)埋點(diǎn)和上報(bào)舉例
我們以上報(bào)首屏加載事件為例,DOM提供了document的DOMContentLoaded事件來監(jiān)聽dom掛載,提供了window的load事件來監(jiān)聽頁面所有資源加載渲染完畢。
(5)前端埋點(diǎn)系統(tǒng)的前后端通信加密
在上報(bào)數(shù)據(jù)的前后端通信中,需要和server端協(xié)商加密機(jī)制,利用 OpenSSL庫來實(shí)現(xiàn)的加密,OpenSSL已經(jīng)是一個(gè)廣泛被采用的加密算法。前端可以采用node的crypto模塊。
首先來看hash算法,crypto.createHash() 來創(chuàng)建一個(gè)Hash實(shí)例,可利用的hash算法如下:
md5
sha1
sha256
sha512
ripemd160
以sha256算法加密為例:
const str="123445";//需要加密的字段 const hash=crypto.createHash("sha256");//指定加密算法 hash.update(str); //通過算法加密相應(yīng)的字段 const result=hash.digest("hex");//轉(zhuǎn)化成十六進(jìn)制四、前端監(jiān)控結(jié)果可視化展示系統(tǒng)的設(shè)計(jì)
當(dāng)后端得到前端上報(bào)的信息之后,經(jīng)過數(shù)據(jù)分析和處理,需要前端可視化的展示數(shù)據(jù)分析后的結(jié)果。
可以在開源中后臺系統(tǒng)ant-design-pro的基礎(chǔ)上進(jìn)行二次開發(fā),首先要明確展示信息。展示的信息包括單個(gè)用戶和整體應(yīng)用。
對于單個(gè)用戶來說需要展示的監(jiān)控信息為:
單個(gè)用戶,在交互過程中觸發(fā)各個(gè)埋點(diǎn)事件的次數(shù)
單個(gè)用戶,在某個(gè)時(shí)間周期內(nèi),訪問本網(wǎng)頁的入口來源
單個(gè)用戶,在每一個(gè)子頁面的停留時(shí)間
對于全體用戶需要展示的信息為:
某一個(gè)時(shí)間段內(nèi)網(wǎng)頁的PV和UV
全體用戶訪問網(wǎng)頁的設(shè)備和操作系統(tǒng)分析
某一個(gè)時(shí)間段內(nèi)訪問本網(wǎng)頁的入口來源分析
全體用戶在訪問本網(wǎng)頁時(shí),在交互過程中觸發(fā)各個(gè)埋點(diǎn)事件的總次數(shù)
全體用戶在訪問本網(wǎng)頁時(shí),網(wǎng)頁上報(bào)異常的集合
刪選功能集合:
時(shí)間篩選:提供今日(00點(diǎn)到當(dāng)前時(shí)間)、本周、本月和全年
用戶刪選:提供根據(jù)用戶id刪選出用戶行為的統(tǒng)計(jì)信息
設(shè)備刪選:刪選不同系統(tǒng)的整體展示信息
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96528.html
摘要:異常監(jiān)控包括前端腳本執(zhí)行報(bào)錯(cuò)等。本文針對整個(gè)前端監(jiān)控,設(shè)計(jì)適用的方案。前端埋點(diǎn)系統(tǒng)的前后端通信加密在上報(bào)數(shù)據(jù)的前后端通信中,需要和端協(xié)商加密機(jī)制,利用庫來實(shí)現(xiàn)的加密,已經(jīng)是一個(gè)廣泛被采用的加密算法。 在線上項(xiàng)目中,需要統(tǒng)計(jì)產(chǎn)品中用戶行為和使用情況,從而可以從用戶和產(chǎn)品的角度去了解用戶群體,從而升級和迭代產(chǎn)品,使其更加貼近用戶。用戶行為數(shù)據(jù)可以通過前端數(shù)據(jù)監(jiān)控的方式獲得,除此之外,前端還...
摘要:說起埋點(diǎn)又到了談起前端項(xiàng)目中數(shù)據(jù)收集與監(jiān)控,那么今天來簡單的聊下前端報(bào)錯(cuò)監(jiān)控的埋點(diǎn)。錯(cuò)誤監(jiān)控的錯(cuò)誤監(jiān)控主要是為了發(fā)現(xiàn)服務(wù)接口返回值的問題。如果為,則偵聽器只在目標(biāo)或冒泡階段處理事件。 說起埋點(diǎn)又到了談起前端項(xiàng)目中數(shù)據(jù)收集與監(jiān)控,那么今天來簡單的聊下前端報(bào)錯(cuò)監(jiān)控的埋點(diǎn)。 首先先安利下自己做的報(bào)錯(cuò)監(jiān)控的項(xiàng)目 FE-Monitor 歡迎 issue 和 star 。 首先我們可以看下前端做報(bào)...
今天來給大家介紹下前端監(jiān)控中一個(gè)特定指標(biāo)的獲取算法,有人會(huì)問,為啥就單單講一個(gè)指標(biāo)?這是因?yàn)?,目前大部分的指?biāo),比如白屏?xí)r間,dom加載時(shí)間等等,都能通過現(xiàn)代瀏覽器提供的各種api去進(jìn)行較為精確的獲取,而今天講的這個(gè)指標(biāo),以往獲取他的方式只能是通過邏輯埋點(diǎn)去獲取它的值,因此在做一些前端監(jiān)控時(shí),需要根據(jù)業(yè)務(wù)需要去改變頁面對這個(gè)值的埋點(diǎn)方式,會(huì)比較繁瑣,恰巧最近剛剛好在做一些前端監(jiān)控相關(guān)的項(xiàng)目,遇到這...
摘要:阿里云上領(lǐng)域各個(gè)產(chǎn)品最終目標(biāo)是為了對以上各個(gè)組件進(jìn)行有效監(jiān)控。阿里云的解決方案地圖基于今天的云上的應(yīng)用架構(gòu),阿里云的解決方案地圖如下所示。其他阿里云服務(wù)包括緩存,等。阿里云解決方案地圖以下表格對阿里云解決方案進(jìn)行總結(jié)。 摘要: PM是近5年來伴隨著云技術(shù)、微服務(wù)架構(gòu)發(fā)展起來的一個(gè)新興監(jiān)控領(lǐng)域。在國內(nèi)外,無論是云廠商(如AWS, Azure,等)還是獨(dú)立的公司(Dynatrace, Ap...
閱讀 2038·2023-04-25 14:50
閱讀 2917·2021-11-17 09:33
閱讀 2621·2019-08-30 13:07
閱讀 2846·2019-08-29 16:57
閱讀 914·2019-08-29 15:26
閱讀 3556·2019-08-29 13:08
閱讀 2000·2019-08-29 12:32
閱讀 3394·2019-08-26 13:57