本文介绍用户体验监控日志中的数据含义。
概览
用户体验监控日志包含明细表和聚合表。
明细表: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 | 卡顿次数 | 此次会话收集的所有长任务的计数。 |