网站监控系统最佳实践之静态资源采样上报

作者 观测云 产品服务部门 深圳团队 朱端畅

背景说明

通过 RUM 采集前端数据时,若采集的数据过多,可能会导致占用过多的网络带宽以及其他资源。特别是刚进入首页加载数据时,可能会调用几十次甚至更多次 v1/write/rum?precision=ms数据采集接口。在这种情况下,一种优化思路是对前端资源采集进行筛选和过滤。

采集数据分类及过滤

数据分类

「观测云控制台」-「用户访问监测」-「查看器」,可以展示以下几种采集数据的分类:

查看器类型概述
Session(会话)查看用户访问的一系列详情,包括用户访问时间、访问页面路径、访问操作数、访问路径和出现的错误信息等。
View(页面)查看用户访问环境、回溯用户的操作路径、分解用户操作的响应时间以及了解用户操作导致后端应用一系列调用链的性能指标情况。
Resource(资源)查看网页上加载的各种资源信息,包括状态码、请求方式、资源地址,加载耗时等。
Action(操作)查看用户在使用应用期间的操作交互,包括操作类型,页面操作详情,操作耗时等。
Long Task(长任务)查看用户在使用应用期间,阻塞主线程超过 50ms 的长任务,包括页面地址、任务耗时等。
Error(错误)查看用户在使用应用期间,浏览器发出的前端错误,包括错误类型、错误内容等。

数据过滤思路

如上大部分数据对于用户访问、性能分析都是非常有帮助的,比如 View 页面资源、Session 会话重放、Error 帮助分析前端错误等。因此,不建议过滤这些数据。

Resource(资源)包含的种类也非常多,其中一部分数据为静态资源数据,大致可以分为:

资源名称描述
HTML(超文本标记语言)HTML是网页的基础构建块,用于定义网页的结构和内容。
CSS(层叠样式表)CSS用于定义网页的样式和布局,包括颜色、字体、布局等。
JavaScript(JS)JavaScript是一种脚本语言,用于在网页中实现交互和动态功能,例如表单验证、页面操作等。
图像(Images)图像文件,如JPEG、PNG、GIF等格式的图片,用于在网页中显示静态或动态图像。
字体(Fonts)用于定义网页文本样式的字体文件,如TrueType(TTF)和可缩放矢量图形(SVG)字体。
样式表(Stylesheets)除了CSS外,还包括其他类型的样式表,如Sass、Less等预处理器生成的样式表。
多媒体(Media)音频和视频文件,如MP3、MP4等格式的音频和视频,用于在网页中嵌入音频和视频内容。
数据文件(Data Files)用于存储网页或应用程序需要的数据的文件,如JSON、XML、CSV等格式的数据文件。
AJAX 请求(XHR/Fetch)使用XMLHttpRequest或Fetch API发送的异步请求,用于从服务器获取数据或与后端进行交互。
矢量图形(Vector Graphics)矢量图形文件,如SVG(可缩放矢量图形)格式的图形,用于在网页中显示可伸缩的矢量图形。
框架(Frameworks)前端框架或库的文件,如React、Vue、Angular等的源代码文件。

通过「观测云控制台」-「用户访问监测」-「查看器」-「Resource」的可视化面板,也会展示这些不同的资源类型:

在 Resource(资源)中, xhr/fetch 的数据属于 Http 请求后端数据,需要与 View 页面及 APM 做关联,因此,不建议过滤这部分数据。而其他的资源数据,如 js、image、css、font 数据重要性相对较低,可以随机过滤。

配置方式

前置条件

  • 安装 DataKit
  • 开启 RUM 采集

数据过滤方式

在前端开发中,beforeSend 函数通常用于处理在发送网络请求之前的预处理逻辑。它是用于在请求发送之前进行一些操作的回调函数。

  • event:表示正在发送的请求对象(如 XHR 对象或 AJAX 对象),可以用于操作请求的相关属性或执行相关操作。
  • domainContext:表示请求的上下文环境,可能包含一些与请求相关的上下文信息。

下面以 NPM 接入 web 应用 SDK 为例,展示在 datafluxRum.init 中加入 beforeSend 方法,过滤掉 Resource(资源)中除了 xhr/fetch 的其他所有数据。

 

php

复制代码

import { datafluxRum } from '@cloudcare/browser-rum'; datafluxRum.init({ applicationId: 'ruoyi_web', datakitOrigin: '<DATAKIT ORIGIN>', // 协议(包括://),域名(或IP地址)[和端口号] env: 'production', version: '1.0.0', service: 'browser', sessionSampleRate: 100, sessionReplaySampleRate: 70, trackInteractions: true, traceType: 'ddtrace', // 非必填,默认为ddtrace,目前支持 ddtrace、zipkin、skywalking_v3、jaeger、zipkin_single_header、w3c_traceparent 6种类型 allowedTracingOrigins: ['https://api.example.com',/https://.*.my-api-domain.com/], // 非必填,允许注入trace采集器所需header头部的所有请求列表。可以是请求的origin,也可以是是正则 //新增beforeSend函数过滤相应的资源数据 beforeSend: function (event, domainContext) { if (event && event.type === 'resource') { if ( event.resource && ['xhr', 'fetch'].indexOf(event.resource.type) > -1 ) { return true } return false } return true } })

如果需要在此基础上再随机采样,可以使用 Math.random()(该方法的取值范围为 0-1)方式随机过滤。如下展示的是随机采集 10% 的数据:

 

csharp

复制代码

beforeSend: function (event, domainContext) { if (event && event.type === 'resource') { if ( event.resource && ['xhr', 'fetch'].indexOf(event.resource.type) > -1 ) { return true } if(Math.random()<0.1){ return true } return false } return true }

效果展示

过滤掉一些静态资源之后,数据采集接口请求只有两个,效果如下图所示,十分明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/122675.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

swagger---接口文档管理生成管理工具

Swagger–接口生成工具 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;再通过Swagger衍生出来的一系列项目和工具&#xff0c; 就可以做到生成各种格式的接口文档&#xff0c;以及在线接口调试页面等等。 官网: https://lswagger.io/knife4j是为Jav…

数学建模:Logistic回归预测

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;Logistic回归预测 Logistic回归预测 logistic方程的定义&#xff1a; x t 1 c a e b t x_{t}\frac{1}{cae^{bt}}\quad xt​caebt1​ d x d t − a b e b t ( c a e b t ) 2 >…

Java 内部类

目录 一、什么是内部类及为何要有内部类 二、四种内部类 1.成员内部类 成员内部类定义&#xff1a; 获取成员内部类对象的方法&#xff1a; 成员内部类获取外部类变量: 额外&#xff1a; 2.局部内部类 局部内部类定义: 如何实现内部类当中的方法&#xff1a; 3.静态内…

Java复习-20-接口(3)- 代理设计模式

代理设计模式(Proxy) 功能&#xff1a;可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标目标对象&#xff0c;可以在目…

自动化测试系列 —— UI自动化测试

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

AR产业变革中的“关键先生”和“关键力量”

今年6月的WWDC大会上&#xff0c;苹果发布了头显产品Vision Pro&#xff0c;苹果CEO库克形容它&#xff1a; 开启了空间计算时代。 AR产业曾红极一时&#xff0c;但因为一些技术硬伤又减弱了声量&#xff0c;整个产业在起伏中前行。必须承认&#xff0c;这次苹果发布Vision P…

zabbix监控网络设备和zabbix proxy

监控linux主机 [rootrocky8 conf]# yum -y install net-snmp vim /etc/snmp/snmpd.conf com2sec notConfigUser default 123456##修改此行,设置团体密码,默认为public,此处 改为123456 view systemview included .1. ##添加此行,自定义授权,否则 zabbix 无法获取数据 [rootr…

什么合同管理系统?4类合同管理软件评测

说到合同管理系统&#xff0c;前提还是弄清楚合同有哪些类型&#xff0c;合同管理有那些痛点&#xff0c;才好对症下药。 一、合同的类型和合同管理的痛点 从法律角度来说&#xff0c;合同可以分为&#xff1a;有名合同与无名合同、单务合同与双务合同、有偿合同与无偿合同、…

conda环境安装opencv带cuda版本

主要是cmake编译选项需要修改 以下两个选项按照自己情况修改 -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules \ -D CUDA_TOOLKIT_ROOT_DIR/usr/local/cuda-12.2 \ 其中/home/lixin/anaconda3/envs/stereo 改成你自己的conda环境 cmake -D CMAKE_BUILD_TYPER…

MySQL阻塞与死锁

MySQL阻塞与死锁 阻塞 因为不同锁之间的兼容性关系&#xff0c;在有些时刻一个事务中的锁需要等待另一个事务中的锁释放它所占用的资源&#xff0c;这就是阻塞。 # 查看等待时间 show variables like innodb_lock_wait_timeout; SETinnodb_lock_wait_timeout60; # 是否在等待…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…

两个类文件,实现根据返回的id显示对应的人员信息增强返回

后台与前台交互时&#xff0c;由于后台存放的原始信息可能就是一些id或code&#xff0c;要经过相应的转换才能很好地在前台展示。 比如&#xff1a; select id, user_id from user 直接返回给前台时&#xff0c;前台可能要根据你这个user_id作为参数&#xff0c;再请求一次后…

【方法】如何取消7Z压缩文件加密的密码?

给7Z格式的压缩文件设置了密码&#xff0c;后续又不需要了&#xff0c;如何取消呢&#xff1f;如果忘记密码&#xff0c;还能取消吗&#xff1f;下面小编来分享一下方法。 首先&#xff0c;我们需要使用支持7Z格式的解压缩软件&#xff0c;如果使用的是WinRAR或者7-Zip解压缩软…

Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

OceanBase社区版4.x核心技术解密

数字化时代&#xff0c;各行各业的数据量呈现爆发式增长&#xff0c;对于海量数据价值的挖掘和应用&#xff0c;正成为推动创新的主要力量&#xff0c;与此同时&#xff0c;数据计算复杂度正在提升。在此背景下&#xff0c;对于数据处理的基石数据库而言&#xff0c;正面临市场…

数学建模--非多项式拟合法的Python实现

目录 1.算法异同区别 2.算法核心步骤 3.算法核心代码 4.算法效果展示 1.算法异同区别 #*************************************************************************************************************# 方法区别探究 1.对于多项式拟合你需要大致知道这些点的分布&#xf…

jsvmp逆向(补环境篇)

书接上回 上篇文章写到tx的jsxmp的算法逆向&#xff0c;文章链接在这里。初试jsvmp加密 。但是可能有伙伴觉得不够详细。 这里放一个大佬的文章链接。 https://www.52pojie.cn/thread-1521480-1-1.html 。其实就是一个变形的xtea加密。 大佬的文章已经讲了很清楚了&#…

Spring MVC入门必读:注解、参数传递、返回值和页面跳转

一、常用注解 1.1.RequestMapping 作用&#xff1a;用于映射请求路径与处理请求的方法之间的关系&#xff0c;可以用在类或方法上 。 标注在方法上 用于方法上&#xff0c;表示在类的父路径下追加方法上注解中的地址将会访问到该方法 Controller public class HelloContro…

Redis集群服务器

集群简介 试想有一家餐厅&#xff0c;如果顾客人数较少&#xff0c;那么餐厅只需要一个服务员即可&#xff0c;如图1。但是&#xff0c;当顾客人数非常多时&#xff0c;一个服务员是绝对不够的&#xff0c;如图2。此时&#xff0c;餐厅需要雇用更多的服务员来解决大量访问&…

Acwing算法心得——现代艺术(统计遍历)

大家好&#xff0c;我是晴天学长&#xff0c;先用两个一维数组维护数据&#xff0c;再统计遍历二维数组&#xff0c;需要的小伙伴请自取哦&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;现代艺术 2) .算法思路 现代艺术 1.两个数组维护行和列 2.遍历数组…