主頁 > 企業開發 > 在京東如何做好前端系統的可觀測性

在京東如何做好前端系統的可觀測性

2023-03-22 14:52:30 企業開發

作者:京東科技 王亞森

前言

本文旨在從0到1的講述一下我們團隊在做系統可觀測性程序中所沉淀下來的一整套解決方案,收效甚巨,不敢茍藏,當公之于眾,共建吾輩光明之未來,

先講一下我們從中得到的好處:

1,當我所負責系統宕機時我能第一時間得到通知

2,當我寫的業務邏輯進入else或者catch時它會通知我

3,當我新做了一個產品功能上線后,我可以監控用戶的訪問情況

4,我不會再擔心早上沒到公司就收到同事的電話說昨晚上線的應用要回滾

5,發現新做的功能上線后有問題,可以第一時間在線將功能切換至老版本運行

6,不管有沒有發生問題我都可以還原用戶的操作軌跡查找問題

7,老板說我們好久沒出生產事故了

下面內容比較干,建議請提前備好茶水,一起賞用更佳

一、介紹

何為系統可觀測性?

可觀測性是一種系統屬性,如功能性或可測驗性,通過收集和分析系統的運行狀態以及系統所承載的業務狀態,用一種可以讓人理解的形式展示出來,以供我們對系統的運行情況做出合理的判斷,

我們要觀測什么?

通用部分:從硬體運維(cpu, meomery, disk)與 軟體應用可訪問性 與 應用性能幾個方面進行監控,

業務部分:從頁面正常初始化,業務可互動性,互動流程完整性 方面進行監控,

我們以集團內部現有的工具進行說明如何來做,而工具實作的技術手段不在本篇文章職責之內,

二、觀測指標

系統指標

服務器運行狀態

cpu 占用率

記憶體占用率,

硬碟 使用率

nginx 啟停狀態

應用指標

  1. 白屏, 因系統錯誤導致的白屏

  2. 資源加載錯誤

  3. 請求400,500

  4. 腳本錯誤,導致阻塞互動

  5. 首屏渲染時間

  6. 頁面完全加載耗時

  7. 介面耗時

業務指標

以信貸產品為例,整個產品的黃金流程分為三部分:授信準入,借款融資,還款,

通用部分

業務例外 (999999)

掊口請求網路超時

介面請求錯誤

未知錯誤(未處理的例外碼)

準入

跳轉實名失敗

補充資訊提交失敗 (從用戶點擊提交按鈕開始,未到最終提交成功)

查詢地址串列例外

獲取合同串列失敗

合同預覽失敗

準入開通結果頁面未在60秒內正常跳轉至首頁

資質審核頁面停留時長超過5分鐘

融資

融資申請提交失敗(介面回傳正常,但未進入結果頁面)

融資鑒權失敗

還款

還款計劃試算失敗

還款失敗

三、如何觀測

以下所有的觀測工具,皆以京東內部為準,以現有的工具,提供觀測方案

系統指標觀測方法

通過jdos 3.0 的智能監控系統 brolly 對系統的 cpu 占用率,記憶體占用率,硬碟使用率 進行監控告警

http://brolly.jdos.jd.com/app/

通過jen 對nginx狀態,以及服務器狀態進行監控告警

http://jen.jd.com/alarmConfig

應用相關指標觀測方法

前端應用我們選擇科技內部的 sgm 做為應用內場景上報工具,關于sgm的介紹與接入指引參考:sgm接入指引

1,白屏告警

由于sgm中的白屏概念是指訪問頁面開始,到頁面展示第一個字符或圖片內容結果,中間用戶感受到地白屏時間,如果因為發生系統錯誤導致無法展示內容而一直白屏,sgm采集到的白屏時間 為 0,所以sgm無法監測白屏故障,

由于白屏時,頁面 #app 內容為空,此時頁面已經完全加載,所以可能通過監聽頁面 load事件,判斷#app內是否有內容來監控頁面是否白白屏,再配上sgm自定義監控告警,從而達到可以有效監控白白屏故障,


window.addEventListener('load', () => {

 if(document.querySelector('#app').children.length < 1){
 
     
     window.__sgm__.custom({
 
         type: 'error',
 
         code: '系統白屏'
 
     })
 
  }
  
})

2,資源告警

詳情見:sgm接入指引

3, API 告警

詳情見:sgm接入指引

4, js error 告警

通過sgm-web 對頁面中所有的腳本錯誤的關鍵字進行監控,常見的js錯誤型別為

SyntaxError 語法錯誤

TypeError 型別錯誤

ReferenceError 參考錯誤

RangeError 范圍錯誤

URIError url決議錯誤

InternalError 內部錯誤

5,性能告警

詳情見:sgm接入指引

業務指標觀測方法

自定義監控告警

自定義告警是監控業務指標的最佳手段,頁面提交失敗,函式進入catch邏輯,等都可以通過自定義監控進行告警設定,

下圖例子中帶Error的編碼,代表進入catch邏輯,需要我們關注,可以通過設定呼叫量的閾值,來進行告警配置

詳情見:sgm接入指引

注意事項

a,埋點上報需包含的資訊

userinfo 介面回傳的用戶資訊,以確保可以拿到用戶標識,查詢相關日志或者用戶軌跡

當前報錯介面對應的出,入參

自定義上報埋點的背景關系資訊,以確認出現錯誤的場景

b, 其中頁面路由跳轉失敗的場景可以通過定時器的方法進行上報,在頁面銷毀時清除定時器、

c,sgm上報用戶標識邏輯

四、閾值優化

1,確定點位的有效性

通過本地模擬錯誤進行告警,以確保所有的點位可以正常上報

2,閾值設定的合理性驗證

首先將所有閾值調整至最低,然后查看報警情況

如果有報警,分析報警資訊的合理性,如果每次都是需要關注的生產問題,那么這里就需要設定為最低的閾值,如果是個例問題或者無須特殊關注的問題,那么把閾值逐漸調高,至合適的頻率

3,Api監控

前端可以無需特殊關注,可以設定一個20%錯誤率批量報警數值即可

4,資源監控

以頁面靜態資源數為準,包含css, js, img 的總和為監控數值,其中 img 標簽存在動態 src 時,頁面在初次渲染會有一次當前頁面url的資源錯誤上報,可通過 v-if 來避免誤報

5,自定義監控

業務中的自定義錯誤上報 遵循第2條的原則進行逐漸優化

6,應用監控告警閾值配置原則:

由于 sgm 常規計算以 60秒錯誤數(),為一個周期,連續發生多少()周期 ,則觸發告警規則,所以我們需要計算出應用的日均pv,以及對應指標產生的數量級,進行設定合理的閾值,

以 日均 pv 為 10000 的應用 為例,每60s pv 約等于7,每個pv 資源數約為 20, 介面呼叫數量約為 3,那么每秒總量是 140次資源請求,21個介面呼叫 ,以 20% 錯誤率上報為標準,來設定對應的閾值,

以上數值可以根據業務線流量視情況而定,

五、報警資訊觸達

1,郵件(必選)

報警方式中選擇郵件,另外在郵箱中配置報警郵件規則,由于報警郵件可能會有很多包括后端的報警,以及一些非緊急報警郵件,可以通過郵件標題來進行區分,

一般標題中會包含應用名,可以通過篩選應用名來過濾前端應用,另外可以根據標題中的[SGM-WEB]來過濾前端相關的報警資訊,

H5_RESOURCE 資源錯誤標題關鍵字

H5_CUSTOM_CODE 自定義監控關鍵字

H5_JS_ERROR 腳本錯誤關鍵字

2,咚咚(必選)

咚咚 報警渠道會比郵件提醒更加及時,被看到的時效性會更高

3,外呼(可選)

時效性最高的報警方法,對于一些關鍵場景,批量錯誤,可以確定是生產問題類的場景需要增加外呼方式,及時觸達資訊

六、生產切量監控

可以使用自定義監控來配合系統的切量功能進行監控

假如我要上線一個新的重大功能,需要在生產環境通過切量的方式,逐漸替換老版本的功能,我們如何去監控上線后新老功能

我們需具備兩個功能,一個是切量功能,一個是監控功能

切量是業務系統實作的一個功能,大概流程如下:

我們分別在新老版本的分支流程里通過自定義埋點來進行監控有多少用戶走到了新流程,有多少老用戶走到了老流程,

然后再通過sgm來查看兩個流程的用戶軌跡來判斷用戶是否在新流程中完成了全部操作,或者是用戶卡在了哪一步,

以此來確定新上線的功能是否有問題,問題出在哪里

并且可以通過查看監控資料,來確定本次切量是否成功,是否需要及時回滾,或者修復上線,將影響范圍縮小,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/547697.html

標籤:其他

上一篇:第三方組件element-ui

下一篇:前端設計模式——模板方法模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more