用户访问指标检测¶
概述¶
用户访问指标检测用于监控工作空间内用户访问监测的指标数据,通过设置阈值范围,当指标到达阈值后触发告警,支持对单个指标设置告警和自定义告警等级。
应用场景¶
支持监控包括 Web、Android、iOS、Miniapp 应用类型的指标数据。例如可以监控 Web 端 基于城市维度的 JS 错误率。
规则说明¶
进入监控器 > 新建监控器,选择用户访问指标检测,进入检测规则的配置页面。
步骤一:检测配置¶
1)检测频率:检测规则的执行频率,包含 1m/5m/15/30m/1h/6h(默认选中 5m)。
2)检测区间:每次执行任务时,检测指标查询的时间范围。受检测频率影响,可选检测区间会有不同。
检测频率 | 检测区间(下拉可选项) |
---|---|
1m | 1m/5m/15m/30m/1h/3h |
5m | 5m/15m/30m/1h/3h |
15m | 15m/30m/1h/3h/6h |
30m | 30m/1h/3h/6h |
1h | 1h/3h/6h/12h/24h |
6h | 6h/12h/24h |
12h | 12h/24h |
24h | 24h |
3)检测指标:设置检测数据的指标。支持设置当前工作空间内单一应用类型下全部/单个应用在一定时间范围内的指标数据。如:当前工作空间内,Web类型下全部应用的指标数据。
字段 | 说明 |
---|---|
应用类型 | 用户访问监测支持的应用类型,包括 Web、Android、iOS、Miniapp |
应用名称 | 基于应用类型获取对应的应用列表,支持全选和单选 |
指标 | 基于应用类型获取的指标列表, Web/Miniapp(包括JS错误数、JS错误率、资源错误数、资源错误率、首次渲染平均时间、页面加载平均耗时、LCP(largest_contentful_paint)、FID(first_input_delay)、CLS(cumulative_layout_shift)、FCP(first_contentful_paint) 等) Android/IOS(包括启动耗时、总崩溃数、总崩溃率、资源错误数、资源错误率、FPS、页面加载平均耗时等)。 |
筛选条件 | 基于指标的标签对检测指标的数据进行筛选,限定检测的数据范围。支持添加一个或多个标签筛选,支持模糊匹配和模糊不匹配的筛选条件。 |
检测维度 | 配置数据里对应的字符串类型(keyword)字段都可以作为检测维度进行选择,目前检测维度最多支持选择三个字段。通过多个检测维度的字段组合,可以确定一个确定的检测对象,观测云会判断某个检测对象对应的统计指标是否满足触发条件的阈值,若满足条件则产生事件。(例如选择检测维度【 host 】与【 host_ip 】,则检测对象可以为{host: host1, host_ip: 127.0.0.1}) |
指标 | 查询示例 |
JS错误数 | R::error:(count(`__docid`) as `JS 错误数`) { `app_id` = '<应用 ID>' } |
JS错误率 | Web: eval(A/B, alias='页面 JS 错误率', A="R::view:(count(`view_url`)) {`view_error_count` > 0, `app_id` = '<应用 ID>'}",B="R::view:(count(`view_url`)) { `app_id` = '<应用 ID>'} ") Miniapp: eval(A/B, alias='JS 错误率', A="R::view:(count(`view_name`)) {`view_error_count` > 0, `app_id` = '<应用 ID>' }",B="R::view:(count(`view_name`)) { `app_id` = '<应用 ID>' }") |
资源错误数 | R::resource:(count(`resource_url`) as `资源错误数`) {`resource_status` >=400, `app_id` = '<应用 ID>'} |
资源错误率 | eval(A/B, alias='资源错误率', A="R::`resource`:(count(`resource_url`)) { `resource_status` >= '400',`app_id` = '<应用 ID>' }", B="R::`resource`:(count(`resource_url`)) { `app_id` = '<应用 ID>' }") |
首次渲染平均时间 | R::page:(avg(page_fpt)){`app_id` = '#{appid}'} |
页面加载平均耗时 | R::view:(avg(loading_time)){`app_id` = '#{appid}'} |
页面慢加载次数 | R::resource:(count(resource_load)){`app_id` = '#{appid}',`resource_load`>8000000000,resource_type='document'} |
资源加载平均耗时 | R::resource:(avg(`resource_load`) as `加载耗时` ) {`app_id` = '#{appid}',resource_type!='document'} |
LCP (largest_contentful_paint) | 包括聚合函数: avg、P75、P90、P99 R::view:(avg(largest_contentful_paint)){`app_id` = '#{appid}'} R::view:(percentile(`largest_contentful_paint`,75)){`app_id` = '#{appid}'} R::view:(percentile(`largest_contentful_paint`,90)){`app_id` = '#{appid}'} R::view:(percentile(`largest_contentful_paint`,99)){`app_id` = '#{appid}'} |
FID (first_input_delay) | 包括聚合函数: avg、P75、P90、P99 R::view:(avg(first_input_delay)){`app_id` = '#{appid}'} R::view:(percentile(`first_input_delay`,75)){`app_id` = '#{appid}'} R::view:(percentile(`first_input_delay`,90)){`app_id` = '#{appid}'} R::view:(percentile(`first_input_delay`,99)){`app_id` = '#{appid}'} |
CLS (cumulative_layout_shift) | 包括聚合函数: avg、P75、P90、P99 R::view:(avg(cumulative_layout_shift)){`app_id` = '#{appid}'} R::view:(percentile(`cumulative_layout_shift`,75)){`app_id` = '#{appid}'} R::view:(percentile(`cumulative_layout_shift`,90)){`app_id` = '#{appid}'} R::view:(percentile(`cumulative_layout_shift`,99)){`app_id` = '#{appid}'} |
FCP (first_contentful_paint) | 包括聚合函数: avg、P75、P90、P99 R::view:(avg(first_contentful_paint)){`app_id` = '#{appid}'} R::view:(percentile(`first_contentful_paint`,75)){`app_id` = '#{appid}'} R::view:(percentile(`first_contentful_paint`,90)){`app_id` = '#{appid}'} R::view:(percentile(`first_contentful_paint`,99)){`app_id` = '#{appid}'} |
指标 | 查询示例 |
启动耗时 | R::action:(avg(duration)) { `app_id` = '<应用 ID>' ,action_type='app_cold_launch'} |
总崩溃数 | R::error:(count(error_type)) {app_id='<应用 ID>',`error_source` = 'logger' and is_web_view !='true'} |
总崩溃率 | eval(A.a1/B.b1, alias='总崩溃率',A="R::error:(count(error_type) as a1) {app_id='<应用 ID>',`error_source` = 'logger',is_web_view !='true'} ",B="R::action:(count(action_name) as b1) { `app_id` = '<应用 ID>',`action_type` in [`launch_cold`,`launch_hot`,`launch_warm`]} ") |
资源错误数 | R::resource:(count(`resource_url`) as `资源错误数`) {`resource_status` >=400, `app_id` = '<应用 ID>'} |
资源错误率 | eval(A/B, alias='资源错误率', A="R::`resource`:(count(`resource_url`)) { `resource_status` >= '400',`app_id` = '<应用 ID>' }", B="R::`resource`:(count(`resource_url`)) { `app_id` = '<应用 ID>' }") |
平均 FPS | R::view:(avg(`fps_avg`)) { `app_id` = '<应用 ID>' } |
页面加载平均耗时 | R::view:(avg(`loading_time`)) { `app_id` = '<应用 ID>' } |
资源加载平均耗时 | R::resource:(avg(`duration`)) { `app_id` = '<应用 ID>' } |
卡顿次数 | R::long_task:(count(`view_id`)) { `app_id` = '<应用 ID>' } |
页面错误率 | eval(A/B, alias='页面错误率',A="R::view:(count(`view_name`)) {`view_error_count` > 0, `app_id` = '<应用 ID>' }",B="R::view:(count(`view_name`)) { `app_id` = '<应用 ID>' }") |
4)触发条件:设置告警级别的触发条件。
配置触发条件及严重程度,当查询结果为多个值时,任一值满足触发条件则产生事件。
更多详情,可参考 事件等级说明。
1、告警级别紧急(红色)、重要(橙色)、警告(黄色)基于配置条件判断运算符。
更多详情,可参考 运算符说明。
2、告警级别正常(绿色)、信息(蓝色)基于配置检测次数,说明如下:
- 每执行一次检测任务即为 1 次检测,如【检测频率 = 5 分钟】,则 1 次检测= 5 分钟;
- 可以自定义检测次数,如【检测频率 = 5 分钟】,则 3 次检测 = 15 分钟。
a. 正常(绿色):检测规则生效后,产生紧急、重要、警告异常事件后,在配置的自定义检测次数内,数据检测结果恢复正常,则产生恢复告警事件。
注意:恢复告警事件不受告警沉默限制。若未设置恢复告警事件检测次数,则告警事件不会恢复,且一直会出现在事件 > 未恢复事件列表中。
b. 信息(蓝色):正常检测结果也产生事件。
3、告警级别无数据(灰色):无数据状态支持触发无数据事件、触发恢复事件、不触发事件三种配置策略。
步骤二:事件通知¶
5)事件标题:设置告警触发条件的事件名称,支持使用预置的模板变量。
6)事件内容:满足触发条件时发送的事件通知内容,支持输入 Markdown 格式文本信息,支持预览效果,支持使用预置的 关联链接 ,支持使用预置的 模板变量。
Attention
最新版本中监控器名称将由事件标题输入后同步生成。旧的监控器中可能存在监控器名称和事件标题不一致的情况,为了给您更好的使用体验,请尽快同步至最新。支持一键替换为事件标题。
不同告警通知对象支持的 Markdown 语法不同,例如:企业微信不支持无序列表。
无数据通知配置:支持自定义无数据通知内容,若没有配置,则自动使用官方默认的通知模版。
7)告警策略:监控满足触发条件后,立即发送告警消息给指定的通知对象。告警策略中包含需要通知的事件等级、通知对象、以及告警沉默周期。
8)同步创建 Issue:若该监控器下产生了异常事件,将同步创建 Issue 异常追踪,投递到异常追踪的频道中。您可以前往异常追踪 > 您选定的频道进行查看。
步骤三:关联¶
9)关联仪表板:每一个监控器都支持关联一个仪表板,即通过关联仪表板功能能够自定义快速跳转的仪表板(监控器关联的仪表板,支持快速跳转查看监控视图)。
示例¶
监控 Skywalking-web-demo 的 Web 端基于服务维度的 JS 错误数。