Grafana faro
官方文檔: https://grafana.com/oss/faro/
官方範例: https://github.com/grafana/faro-web-sdk
什麼是 前端可觀測性?
簡單來說是指針對前端應用程序進行全面監控和分析的能力,確保有良好的 performance 和用戶體驗
最重要的目的在於從效能的角度 改善使用者體驗。
可觀測性技術是通過 紀錄即時日誌記錄(Logs)、指標監控(Metrics)、分布式追踪(Traces) 等工具和技術,為企業提供全面、精確和實時的系統觀測能力, 從而幫助企業深入了解系統的運行狀況、行為模式和性能指標。
可觀測性技術不僅僅是簡單地監控系統狀態,還可以提供對系統內部進行深度洞察的能力, 有助於快速發現問題、定位故障,並採取相應措 施進行故障修復和性能優化。
為什麼需要 前端可觀測性

最初由 Steve Souders,一位在網站性能優化領域的先驅和專家提出:
提出了一個觀點「Performance Golden Rule」,
是一個在網站性能優化領域常被提及的概念,
80-90% of the end-user response time is spent on the frontend
用戶感知到的 80-90% 響應時間是在前端發生的。
在這理論的 Response Time / Concurrnet Users 矩陣圖中,可以得出當同時使用人數越低或後端服務負載不高時,前端的處理時間在影響效能的比重就越大。
可以看出前端效能優化的重要性完全不小於後端,進而點出 Grafana Faro 在效能指標、量測與可觀測性的重要之處。
humans are impatient
任何造成延遲的原因都可能導致 application 失去潛在客戶
RD 需要知道
- 當系統的效能變慢,是哪一個 function 在作怪,錯誤在哪一個階段壞掉?
- 請求時間變長,這些問題是在前端發生還是後端發生的? 以上都是可觀測性都是要解決的問題, 因為真實體感時間是 USER 從前端按下按鈕開始
當前數位時代中,為用戶提供高效能且流暢的體驗對任何線上服務至關重要。
這正是實際用戶監測(Real User Monitoring,簡稱 RUM)在前端開發和生產環境中成為不可或 缺工具的原因。
What is Real User Monitoring (RUM)?
Real User Monitoring (RUM) 是一種前端性能監控技術,可記錄使用者與網站或 Web 應用程式的互動,並提供對最終使用者體驗問題的可見性。
RUM 會在網站的頁面上插入一個小的 JavaScript 程式碼,當使用者訪問該網站時自動觸發該程式碼,用來報告頁面載入數據和其他性能指標。
這些數據基於實際的使用者在網站上的互動,使您能夠快速識別和優化需要立即關注的網站區域,以改善最終用戶體驗。
Grafana Faro
Grafana Faro 是 Grafana Labs 開發的一個開源前端可觀測性平台。
它提供了一套工具庫,可以僅僅使用兩三行代碼輕鬆嵌入到 Web 應用服務中(跟 React 高度整合), 可以收集和分析用戶行為、效能指標及其他可觀測性數據(包括 Web Vitals 效能指標、Console Log、Exception、Events、Traces。)
- 追蹤用戶的具體行為,如點擊和滾動
- 監控頁面加載時間和服務器響應時間等關鍵效能指標
- 瀏覽器錯誤日誌、API 請求狀態,以及用戶設備信息等
使用情境
在某 些大型活動期間訪問該商店,此時流量可能會擴大成 100 倍。
後端 API 可以使用 OpenTelemetry 來監控 API。
前端的部分則可以使用 Grafana Faro 來監控前端的效能指標、日誌、異常、事件和追踪。
介紹
Web 應用程序通過 Grafana Faro Web SDK 收集各種數據,這些數據被發送到 Grafana Agent 進行處理,
然後分別存儲到 Logs 和 Tempo,最終在 Grafana 中進行可視化和分析。
-
Web Application:
這是指 Web 應用程序本身,通過 Grafana Faro Web SDK 收集日誌、異常、測量、事件和追踪信息。
-
Grafana Agent:
- 收集到的數據隨後會被 Grafana Agent 接收。
- 接收來自 Web SDK 的數據(包括日誌、異常、測量、事件和追踪),並將這些數據進一步處理和轉發,送到不同的儲存系統中。
-
最終數據會被匯聚到 Grafana Dashboard 上(Logs, Tempo, and Grafana)
Logs:存儲並處理日誌、異常、事件和測量數據。
Tempo:專門處理 Trace 數據。
Grafana:一個視覺化和分析平台,用於展示來自 Logs 和 Tempo 的數據。