本文介紹用戶體驗監控日志中的數據含義。
概覽
用戶體驗監控日志包含明細表和聚合表。
明細表: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 | 卡頓次數 | 此次會話收集的所有長任務的計數。 |