本文介紹使用者體驗監控日誌中的資料含義。
概覽
使用者體驗監控日誌包含明細表和彙總表。
明細表:View表、Resource表、Exception表、Action表、Custom表、Application表和System表
彙總表:Session表
其中,Application表和System表只有原生App監控使用。
名詞解釋
屬性(Attribute):索引,一般為String類型,對資料進行分組、過濾、彙總等作用,不可量化但具備有限可枚舉性、索引。
度量(Measure):索引,一般為Number類型,是可量化的值。
中繼資料(Metadata):預設非索引,作為描述資料的資料,主要是描述資料屬性的資訊。
公用屬性
公用屬性需要建立索引,是資料過濾和彙總的重要組成部分,在明細表和彙總表中都將存在。同一SessionID在一般情況下公用屬性的值保持一致,但也有可能不同,例如Session內切換帳號後uid不同導致的差異。
屬性名稱 | 類型 | 指標項 | 說明 |
timestamp | long | 發生時間 | 事件發生的開始時間,如果沒有則取系統時間補齊。 |
event_type | string | 事件類型 | view、resource、exception、longtask、action、custom,以及彙總表session。 |
event_id | string | 事件ID | 除view和session之外的resource、exception、longtask、action和custom。 |
app.id | string | 應用ID | 建立RUM應用產生的唯一應用ID。 |
app.version | string | 應用版本 | 使用者自己定義的版本號碼。 |
app.channel | string | 應用渠道 | 應用渠道。 |
app.env | string | 環境資訊 | 環境類型,用於區分生產pord(預設)、灰階gray、預發pre等。 |
app.type | string | 應用類型 | 對應使用者建立應用時的應用類型,由上報和資料流雙邊指定,取值:
|
app.package | string | 應用程式套件名 | Package在不同的平台下對應著不同定義:
|
user.id | string | 使用者ID | 使用者ID,初始化SDK時可主動傳入,不配置SDK隨機產生。 |
user.name | string | 使用者名稱 | 使用者名稱稱,需要自訂配置。 |
user.tags | string | 使用者標籤 | 使用者標籤。 |
device.id | string | 裝置ID | 裝置ID。 |
device.type | string | 裝置類型 | 裝置報告的裝置類型,例如:移動手機、PC。 |
device.brand | string | 裝置品牌 | 裝置報告的裝置品牌,例如:mac、iPad、華為、小米。 |
device.model | string | 裝置型號 | 裝置報告的裝置型號。 |
device.name | string | 裝置名稱 | 裝置報告的裝置名稱。 |
os.type | string | 作業系統 | 裝置報告的作業系統名稱。 |
os.version | string | 作業系統版本 | 裝置報告的作業系統版本。 |
os.container | string | 容器類型 | 例如:Chrome、微信小程式、App(應用程式名稱)。 |
os.container_version | string | 容器版本 | 例如:Chrome的版本。 |
geo.country | string | 國家 | 國家名稱。 |
geo.country_id | string | 國家ISO | 國家的ISO代碼。 |
geo.province | string | 省份/地區 | 省份或地區名稱。 |
geo.province_id | string | 地區 Code | 省份或地區Code。 |
geo.city | string | 城市 | 城市名稱。 |
geo.city_id | string | 城市 Code | 城市Code。 |
isp.id | string | 電訊廠商ID | 電訊廠商ID。 |
isp.name | string | 電訊廠商名稱 | 電訊廠商名稱。 |
net.model | string | 接入方式 | 網路接入方式:2G、3G、4G、5G、WIFI、Unknown等,根據具體平台資訊返回。 |
net.name | string | 網路名稱 | Ethernet名稱。 |
公用Measure
指標 | 類型 | 描述 |
times | int | 事件發生的次數,預設值是1。 |
公用Metadata
欄位名 | 類型 | 描述 |
os.user_agent | string | 上報要求標頭。 |
net.ip | string | 用戶端IP |
device.sr | string | 螢幕解析度。 |
os.container_vp | string | 頁面大小解析度。 |
明細表設計
View表
可互動的使用者視圖,關注訪問量和相關效能資料,View是針對視圖的歸類,分為:
PV:用於計算View被訪問的數量,每次View的訪問PV必須上報,是關聯各種事件,計算各種時序指標的基礎資料。
Webvitals:基於Google提出的視圖效能三大指標,由於採集時機差異較大且標準邊界清晰,採取單獨儲存。
Perf:視圖常見效能資料,是一個相對比較雜指標類別,基於Perfmonce標準,此類型關注頁面客觀效能,可因主觀改變的效能不包含在內()。
說明看主觀改變的效能例如:頁面停留時間長度。從定義角度來說,頁面停留時間長度是使用者的一種行為資料,放在Action中去管理更合理。
Webvitals和Perf為可選上報的類型,原生視圖可能不適用。
Attributes
屬性名稱 | 類型 | 指標項 | 描述 |
session.id | string | 會話ID | 關聯的Session。 |
view.id | string | 視圖ID | 為每個整頁模式隨機產生的ID。 |
view.name | string | 視圖名稱 | 針對一類別檢視的別名,預設為URL的path部分,可以基於規則進行匹配或使用者主動配置。 |
view.loading_type | string | 視圖載入方式 | 視圖載入類型:
|
view.type | string | 視圖事件類型 | View事件類型:
|
view.view_type | string | 視圖渲染類型 | - |
Measures
屬性 | 類型 | 指標項 | 描述 |
view.time_spent | long (ms) | 頁面 | 在當前視圖上花費的時間。 |
view.largest_contentful_paint | long (ms) | 最大內容渲染耗時 | 頁面載入時間軸中呈現視圖中最大DOM對象(螢幕上可見)的時刻,大於2.5秒標記為慢。 |
view.first_input_delay | long (ms) | 首次輸入延遲耗時 | 從使用者第一次與頁面互動到瀏覽器響應之間經過的時間。 |
view.cumulative_layout_shift | long | 累積布局配置位移 | 量化由於動態載入的內容(例如第三方廣告)而導致的意外頁面移動,其中0表示沒有發生變化。 |
view.first_contentful_paint | long (ms) | 首次內容渲染耗時(白屏時間) | FCP瀏覽器首次呈現text、image(包括背景映像)、非白色Canvas或SVG的時間。 |
view.dom_interactive | long (ms) | 首次可互動時間 | 內容可互動時間。 |
view.dom_content_loaded | long (ms) | HTML完全載入時間(DOM Ready 耗時) | 當初始HTML文檔完全載入和解析時觸發事件,無需等待非渲染阻塞stylesheets、images和subframes完成載入。 |
view.dom_complete | long (ms) | DOM | 頁面和所有子資源都準備好了。對於使用者Loading已停止旋轉。 |
view.load_event | long (ms) | 頁面完全載入時間 | 頁面完全載入時觸發的事件。通常是附加應用程式邏輯的觸發器。 說明 小於2秒的頁面載入時間被認為是優良的,而且高達4秒是可接受的。 大於5秒的頁面載入時間不僅影響網站的搜尋引擎排名,還會嚴重影響使用者體驗。 |
Metadata
屬性名稱 | 類型 | 描述 |
view.referrer | string | 上一個網頁的URL,從該網頁連結到當前請求的頁面。 |
view.url | string | View對應的URL,完整的URL包含了scheme協議、host、path、query、hash部分。 |
view.timing_data | string | PerformanceResourceTiming的JSONString。 |
view.snapshots | string | View快照JSONString,主要用於原生App。 |
Resource表
Resource事件是針對網路請求的歸納,基於HTTP協議和Perfmonce標準制定的RUM事件類型。由於 Perfmonce在不同的平台環境下有不少的差異,RUM針對這部分差異做了修正拉齊。
從業務和習慣出發,Resource分為靜態資源和API兩大類別,本質上來說,靜態資源和API沒有任何區別,都是HTTP請求的資源,但關注點上有比較大的區別,具體如下:
靜態資源(resource.type為css、javascript、image、media等)關注的是資源類型、CDN、網路穩定性等。其中,當resource.type為navigation時,關聯View視圖(view.id相同)的資源資料。
API(resource.type為XHR、fetch和API)會更加關注與服務端之間的關聯,如響應碼、Response內容等,還會和Tracing有強關聯。
XHR和fetch主要出現在瀏覽器和WebView中,或有類似週期性情境中。
API是在不確定API類型時的預設值,常見於原生和小程式情況下。
一般來說Resource只關注發起了真實網路請求的情況,對於從緩衝中擷取的情況上報前推薦過濾不上報。對於確有上報價值的情況(如計算快取命中率,資源使用量)需要對該類型進行緩衝打標,以區分發起了網路請求的資源。
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
view.id | string | 關聯的View。 |
view.name | string | 關聯的view.name。 |
resource.type | string | 採集的資源類型。如:css、javascript、media、XHR、image、navigation。 說明 如果是XHR或者fetch,則資源類型會被認為是API。 |
resource.method | string | HTTP要求方法。如:POST、GET。 |
resource.status_code | string | 資源狀態代碼。 |
resource.message | string | 一般錯誤時補充的返回結果內容,對應resource.error_msg。 |
resource.url | string | 資源URL。 |
resource.name | string | 預設為URL的Path部分,可以基於規則進行匹配或使用者主動配置。 |
resource.provider_type | string | 資源提供者類型。如:first-party、cdn、ad、analytics。 |
resource.trace_id | string | 資源請求的TraceID。 |
Measure
指標 | 類型 | 描述 |
resource.success | number | 資源載入是否成功:
|
resource.duration | long (ms) | 載入資源所花費的全部時間。 計算公式:responseEnd - redirectStart |
resource.size | long (bytes) | 資源大小,對應decodedBodySize。 |
resource.connect_duration | long (ms) | 與伺服器建立串連所花費的時間。 計算公式:connectEnd - connectStart |
resource.ssl_duration | long (ms) | TLS握手所花費的時間。如果最後一個請求不是通過HTTPS,則不會出現此指標。 計算公式:connectEnd - secureConnectionStart 此處需要特別判斷一下,如果secureConnectionStart的值為0, 說明沒有發起SSL串連,此時不計算ssl_duration,ssl_duration賦值為0。 |
resource.dns_duration | long (ms) | 解析最後一個請求的DNS名稱所花費的時間。 計算公式:domainLookupEnd - domainLookupStart |
resource.redirect_duration | long (ms) | 重新導向HTTP請求的時間。 計算公式:redirectEnd - redirectStart |
resource.first_byte_duration | long (ms) | 等待接收響應的第一個位元組所花費的時間。 計算公式:responseStart - requestStart |
resource.download_duration | long (ms) | 下載響應所用的時間。 計算公式:responseEnd - responseStart |
Metadata
屬性 | 類型 | 描述 |
resource.timing_data | string | PerformanceResourceTiming的JSONString。 |
resource.trace_data | string | 鏈路追蹤資訊快照:
|
resource.snapshots | string | View快照,主要用於原生App包含。
|
resource.node_name | string | 發起請求的Dom類型。 |
resource.xpath | string | 發生xpath的位置。 html. > body. > img. |
resource.provider_name | string | 資源提供者名,預設為unknown。 |
resource.provider_domain | string | 資源提供者網域名稱。 |
Exception表
Exception是代碼執行過程中發生了預期之外的情況。
Crash:應用發生崩潰。
ANR:即Android應用程式無響應(Application No Responding),特定的Message(如Key Dispatch、Broadcast、Service) 在應用的UI線程(主線程)內沒有按規定的時間處理完,將會觸發ANR異常。根據定義ANR具備異常的所有特徵,是Exception的一種類型,而非LongTask。
Exception:沒有引起Crash和ANR的其他異常情況。
Custom:使用者主動上報的自訂錯誤。
Error:主要用於記錄JavaScript相關的錯誤。
Blank:用於白屏監控,主要針對瀏覽器下的白屏情況。
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
view.id | string | 關聯的View。 |
view.name | string | 關聯的view.name。 |
exception.source | string | 錯誤來源。如:console、event。 |
exception.file | string | 錯誤檔案。 |
exception.type | string | 錯誤類型包括:
|
exception.subtype | string | 是錯誤類型的二級分類 |
exception.name | string | 錯誤名稱。 |
exception.message | string | 一個簡潔可讀的、解釋事件的訊息。 |
Metadata
屬性 | 類型 | 描述 |
exception.stack | string | 有關錯誤的堆疊追蹤或補充資訊。 |
exception.caused_by | string | 異常原因。 |
exception.line | long | 異常發生程式碼數。 |
exception.column | long | 異常發生代碼列數。 |
exception.thread_id | string | 線程ID。 |
exception.binary_images | string | 錯誤來源。 |
exception.snapshots | string | 錯誤快照。 |
Action表
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
view.id | string | 關聯的View。 |
view.name | string | 關聯的view.name。 |
action.type | string | 使用者行為類型。 |
action.name | string | 語義化的名稱。如:單擊#checkout。 |
action.target_name | string | 使用者與之互動的元素。僅用於自動收集的動作。 |
Measure
指標 | 類型 | 描述 |
action.duration | long (ms) | 行為期間。 |
Metadata
屬性 | 類型 | 描述 |
action.snapshots | string | 行為快照。 |
action.method_info | string | 行為回調。如:onClick()。 |
Custom表
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
view.id | string | 關聯的View。 |
view.name | string | 關聯的view.name。 |
custom.type | string | 自訂類型。 |
custom.name | string | 自訂事件名稱。 |
custom.group | string | 自訂事件分組。 |
Measure
屬性 | 類型 | 描述 |
custom.value | number | 自訂事件分組。 |
Metadata
屬性 | 類型 | 描述 |
custom.snapshots | string | 字元長度一般不超過5000個字元。 |
Application表
應用級事件,如:冷/暖開機、應用退出、應用切出/入等。
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
application.type | string | 枚舉類型:
|
application.name | string | 作為application.type的細粒度類型,如:
|
Measure
指標 | 類型 | 描述 |
application.duration | long(ms) | 對應應用事件類型的耗時。 |
Metadata
屬性 | 類型 | 描述 |
application.snapshots | string | 應用啟動事件的快照資料,一般為線程方法。 |
System表
Attributes
屬性 | 類型 | 描述 |
session.id | string | 關聯的Session。 |
system.type | string | 使用者行為類型。 |
system.name | string | 語義化的名稱,例如單擊#checkout。 |
Metadata
屬性 | 類型 | 描述 |
system.snapshots | string |
|
彙總表設計
Session表
Attributes
屬性名稱 | 類型 | 描述 |
session.id | string | 每個會話隨機產生的ID。 |
session.ip | string | 用戶端IP地址。 |
session.referrer | string | 上一個網頁的URL,從該網頁連結到當前請求的頁面。 |
session.initial_view_id | string | 使用者產生的第一個View ID。 |
session.initial_view_name | string | 使用者產生的第一個View Name。 |
session.last_view_id | string | 使用者產生的最後一個View ID。 |
session.last_view_name | string | 使用者產生的最後一個View Name。 |
session.start | long | Session的開始時間戳。 |
session.end | long | Session的結束時間戳記。 |
Metadata
屬性 | 類型 | 描述 |
session.initial_view.url | string | 使用者產生的第一個View URL。 |
session.last_view_url | string | 使用者產生的最後一個View URL。 |
Measure
指標 | 類型 | 名稱 | 描述 |
session.time_spent | long (ms) | 會話時間長度 | 使用者會話的期間。 |
session.view_count | long | 視圖數量 | 此次會話收集的所有瀏覽次數。 |
session.exception_count | long | 異常數量 | 此次會話收集的所有異常的計數。 |
session.resource_count | long | 資源請求數 | 此次會話收集的所有資源的計數。 |
session.resource_error_count | long | 資源錯誤數 | 此次會話收集的所有錯誤資源的計數。 |
session.api_count | long | API請求數 | 此次會話收集的所有API請求的計數。 |
session.api_error_count | long | API錯誤數 | 此次會話收集的所有API請求錯誤的計數。 |
session.action_count | long | 使用者事件數目 | 此次會話收集的所有操作的計數。 |
session.long_task_count | long | 卡頓次數 | 此次會話收集的所有長任務的計數。 |